Python&;Postgres:psycopg2.connect会锁定表吗?
我正在运行一个python脚本来执行ETL(提取、转换、加载),并将所有psql查询放在一个事务中。以下是交易记录: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
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
。您还应该始终记录或重新抛出异常,永远不要默默地接受它。