python - 复制命令阻止 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 会话?
解决方案
这不是普遍现象。这里发生的事情比你告诉我们的要多。
也许 COPY 发生在同一个事务中,因为其他事务在被选择的同一个表上获得了强锁(如 TRUNCATE)。或者,也许您的 SELECT 正在调用一些用户定义的函数(可能是直接的,可能通过触发器或其他方式),它正在获得比 SELECT 通常需要的更强的锁定。
在没有诸如此类的特殊条件的情况下,我同时运行 COPY 和 SELECT 没有问题。
推荐阅读
- python - 我正在开发一个使用 Django 的 Web 应用程序,在 Nginx 上运行,我收到 111 连接被拒绝,我不知道为什么
- android - 在文件管理器android中打开外部SD卡路径
- python - SQLAlchemy 中的 double equal == 语法如何工作
- apache-camel - Apache camel 在多个节点上运行
- python - 在使用 Python 访问 API 以获取 json 请求之前,轮换代理 IP
- android - 使用数据绑定,如何将函数(或 lambda)变量传递给包含的布局
- flutter - Flutter Single Child Scroll View,列中的每个项目占父项高度的 1/3
- reactjs - 我的 Google 地图没有使用我的页脚 CSS
- javascript - 检查函数是否由useCallback创建?
- javascript - 反应,如何将名称放入 JSON 数据中