我正在使用将数据从csv文件导入postgres表 copy from
像这样的命令 copy tbl_name(col1, col2, col3) from '/sample.csv' delimiter ',';
该命令在事务中执行(读写)。当这个命令执行时,我正在新终端中打开一个新的sql会话,但是在这个新会话中,我无法执行 select
命令。它将被卡住,直到事务在第一个会话中提交。当我在python程序中使用 copy_expert
指挥 Psycopg2
,即使我已经用池创建了连接引擎。有没有可能防止postgres在将数据复制到表中时阻塞er会话?
2条答案
按热度按时间nsc4cvqm1#
这不是普遍现象。这里发生的事情比你告诉我们的还多。
复制可能发生在同一事务中,因为其他事务在所选的同一个表上获得了一个强锁(比如truncate)。或者,您的select正在调用某个用户定义的函数(可能是直接调用的,也可能是通过触发器或其他方式调用的),该函数获取的锁比select通常需要的更强。
在没有这些特殊条件的情况下,我可以同时运行copy和select。
o3imoua42#
那是不可能的,除非你使用
SELECT ... FOR UPDATE
,它尝试对已被COPY
.postgresql的一个原则是读者不阻止作者,反之亦然。