copy命令阻止postgres中的其他会话

bjp0bcyl  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(303)

我正在使用将数据从csv文件导入postgres表 copy from 像这样的命令 copy tbl_name(col1, col2, col3) from '/sample.csv' delimiter ','; 该命令在事务中执行(读写)。当这个命令执行时,我正在新终端中打开一个新的sql会话,但是在这个新会话中,我无法执行 select 命令。它将被卡住,直到事务在第一个会话中提交。当我在python程序中使用 copy_expert 指挥 Psycopg2 ,即使我已经用池创建了连接引擎。有没有可能防止postgres在将数据复制到表中时阻塞er会话?

nsc4cvqm

nsc4cvqm1#

这不是普遍现象。这里发生的事情比你告诉我们的还多。
复制可能发生在同一事务中,因为其他事务在所选的同一个表上获得了一个强锁(比如truncate)。或者,您的select正在调用某个用户定义的函数(可能是直接调用的,也可能是通过触发器或其他方式调用的),该函数获取的锁比select通常需要的更强。
在没有这些特殊条件的情况下,我可以同时运行copy和select。

o3imoua4

o3imoua42#

那是不可能的,除非你使用 SELECT ... FOR UPDATE ,它尝试对已被 COPY .
postgresql的一个原则是读者不阻止作者,反之亦然。

相关问题