Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python&;Postgres:psycopg2.connect会锁定表吗?_Python_Database_Postgresql_Transactions_Table Locking - Fatal编程技术网

Python&;Postgres:psycopg2.connect会锁定表吗?

Python&;Postgres:psycopg2.connect会锁定表吗?,python,database,postgresql,transactions,table-locking,Python,Database,Postgresql,Transactions,Table Locking,我正在运行一个python脚本来执行ETL(提取、转换、加载),并将所有psql查询放在一个事务中。以下是交易记录: conn = psycopg2.connect(...) try: cur = conn.cursor() #q1 cur.execute("create temp table tt (like t INCLUDING DEFAULTS)") #q2 cur.execute("copy tt from '/file.csv' DELIMITER ',' C

我正在运行一个python脚本来执行ETL(提取、转换、加载),并将所有psql查询放在一个事务中。以下是交易记录:

conn = psycopg2.connect(...)
try:
    cur = conn.cursor() #q1
    cur.execute("create temp table tt (like t INCLUDING DEFAULTS)") #q2
    cur.execute("copy tt from '/file.csv' DELIMITER ',' CSV HEADER ") #q3
    cur.execute("...") #q4,   update t based on data from tt
    conn.commit()
except:
    conn.rollback()
我知道在运行q4时该表将被锁定,但我不确定在整个事务(从连接到提交)期间该表是否会被锁定

有没有办法测试表是否被锁定?我现在没有太多的数据(大约100行)

非常感谢

我知道在运行q4时该表将被锁定,但我不确定在整个事务(从连接到提交)期间该表是否会被锁定

锁是在第一次需要时获取的,并在事务提交时释放,而不是在事务提交之前

因此,在您的情况下,只有在
q4
之前,您才能访问
t
,因此这就是锁定的时间。尽管名称不同,但它是一个表级锁;此外,行级别的锁用于更新的行

有没有办法测试表是否被锁定?我现在没有太多的数据(大约100行)


。了解表级锁和行级锁都有。

Python没有
catch
。除了,它有
。我也不认为有理由为每个连接锁定表。是的,我错了。应该是例外@msvalkon谢谢!除了
,您不应该使用无条件的
。至少,
除了异常
,但最好是
除了psycopg2.DatabaseError
。您还应该始终记录或重新抛出异常,永远不要默默地接受它。