gpt4 book ai didi

postgresql - FDW 似乎锁定了外部服务器上的表

转载 作者:行者123 更新时间:2023-11-29 13:35:39 25 4
gpt4 key购买 nike

我尝试使用外部表来链接 2 个 postgresql 数据库

一切正常,我可以检索所有我想要的数据

唯一的问题是数据包装器似乎锁定了外部服务器中的表,这在我对代码进行单元测试时非常烦人

如果我不执行任何选择请求,我可以初始化数据并截断本地服务器中的表和远程服务器中的表但是我执行了一个 select 语句远程服务器上的 truncate 命令似乎处于死锁状态

你知道我怎样才能避免这个锁吗?

谢谢

[编辑]

我使用这个数据包装器链接 2 个 postgresql 数据库:http://interdbconnect.sourceforge.net/pgsql_fdw/pgsql_fdw-en.html

我使用db1的table1作为db2的外部表

当我在 db2 的 foreign_table1 中执行选择查询时,db1 中的 table1 有一个 AccessShareLock查询非常简单:select * from foreign_table1

锁永远不会释放,所以当我在单元测试结束时执行 truncate 命令时,会发生冲突,因为 truncate 添加了 AccessExclusiveLock

我不知道如何释放第一个 AccessShareLock,但我认为它会由包装器自动完成...

希望对你有帮助

最佳答案

AccessExclusiveLock 和 AccessShareLock 通常不会显式获取。它们是通过某些正常语句自动获得的。参见 locking - 锁列表说明哪些语句获取哪些锁,它说:

ACCESS SHARE

Conflicts with the ACCESS EXCLUSIVE lock mode only.

The SELECT command acquires a lock of this mode on referenced tables. In general, any query that only reads a table and does not modify it will acquire this lock mode.

这意味着您的第一个事务尚未提交或回滚(因此释放了它的锁),因此第二个事务不能TRUNCATE 表,因为TRUNCATE 要求 ACCESS EXCLUSIVEACCESS SHARE 冲突。

确保第一个事务提交或回滚。

顺便说一句,“外部”数据库实际上是本地数据库吗,即您是否使用 pgsql_fdw 作为 dblink 的替代方案来模拟自主事务?

关于postgresql - FDW 似乎锁定了外部服务器上的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12777550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com