如何在执行psycopg2的copy\u之后释放postgres表上的锁

vhipe2zx  于 2021-07-29  发布在  Java
关注(0)|答案(0)|浏览(209)

我正在用python构建etl管道,将数据从s3加载到postgres数据库。因为有数以百万计的记录,我必须读取数据由雅典娜在块和使用一个interator加载到数据库中的数据。Pandas的 to_sql 太慢了,所以我在用 copy_from 将数据从缓冲区复制到表。但是在复制之后,表得到了锁。锁的数量取决于读取的块数。之后的下一步是截断该表。但是,由于表上有锁,因此不能截断它。如果只有一个块,那么在加载之后锁有时会被释放。从db断开连接似乎也无助于释放锁。

  1. conn = psycopg2.connect(database=DBNAME, user=USER, host=HOST, password=DB_PASS)
  2. for data_df in list(data_iter):
  3. sio = StringIO()
  4. sio.write(data_df.to_csv(index=None, header=None, quoting=csv.QUOTE_NONE, escapechar='\\', sep='|'))
  5. sio.seek(0)
  6. try:
  7. with conn.cursor() as c:
  8. c.copy_from(sio, 'cost_settlements_stg', columns=data_df.columns, sep='|')
  9. conn.commit()
  10. except Exception as e:
  11. conn.close()
  12. raise e
  13. conn.close()

为什么装载后锁没有松开?我是否必须显式地找到锁的PID并终止它们?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题