首页 > 解决方案 > 复制命令阻止 postgres 中的其他会话

问题描述

copy from我正在使用这样的命令将数据从 CSV 文件导入 Postgres 表

copy tbl_name(col1, col2, col3) from '/sample.csv' delimiter ',';

该命令在事务中执行(读写)。在执行此命令时,我正在新终端中打开一个新的 SQL 会话,但在这个新会话中,我无法执行select命令。它将被卡住,直到在第一个会话中提交事务。当我在 python 程序中使用copy_expert命令复制文件时,也会发生同样的问题Psycopg2,即使我已经创建了带有池的 connection_engine。是否可以防止 Postgres 在将数据复制到表中时阻止 er 会话?

标签: pythonsqlpostgresqlsqlalchemypsycopg2

解决方案


这不是普遍现象。这里发生的事情比你告诉我们的要多。

也许 COPY 发生在同一个事务中,因为其他事务在被选择的同一个表上获得了强锁(如 TRUNCATE)。或者,也许您的 SELECT 正在调用一些用户定义的函数(可能是直接的,可能通过触发器或其他方式),它正在获得比 SELECT 通常需要的更强的锁定。

在没有诸如此类的特殊条件的情况下,我同时运行 COPY 和 SELECT 没有问题。


推荐阅读