Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql FDW似乎将表锁定在外部服务器上_Postgresql_Postgresql 9.1 - Fatal编程技术网

Postgresql FDW似乎将表锁定在外部服务器上

Postgresql FDW似乎将表锁定在外部服务器上,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我尝试使用外部表链接2个postgresql数据库 一切都很好,我可以检索我想要的所有数据 唯一的问题是,数据包装器似乎锁定了外部服务器中的表,当我对代码进行单元测试时,这非常烦人 若我不执行任何select请求,我可以初始化数据并截断本地服务器中的表和远程服务器中的表 但我执行了一个select语句,远程服务器上的truncate命令似乎处于死锁状态 你知道我怎样才能避开这把锁吗 谢谢 [编辑] 我使用此数据包装器链接2个postgresql数据库: 我在db2中使用db1的表1作为外部表 当

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

一切都很好,我可以检索我想要的所有数据

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

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

你知道我怎样才能避开这把锁吗

谢谢

[编辑]

我使用此数据包装器链接2个postgresql数据库:

我在db2中使用db1的表1作为外部表

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

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

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


希望此帮助通常不会显式获取AccessExclusiveLock和AccessShareLock。它们是通过某些正常语句自动获取的。请参阅-锁列表说明哪些语句获取哪些锁,其中说明:

访问共享

仅与访问独占锁定模式冲突

SELECT命令在引用的表上获取此模式的锁。 通常,任何只读取表而不修改表的查询 将获取此锁定模式

这意味着您的第一个事务尚未提交或回滚(从而释放其锁),因此第二个事务无法
截断表,因为
截断
需要
访问独占
,这与
访问共享
冲突

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


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

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

访问共享

仅与访问独占锁定模式冲突

SELECT命令在引用的表上获取此模式的锁。 通常,任何只读取表而不修改表的查询 将获取此锁定模式

这意味着您的第一个事务尚未提交或回滚(从而释放其锁),因此第二个事务无法
截断表,因为
截断
需要
访问独占
,这与
访问共享
冲突

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

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

您确实需要提供更多详细信息。特别是,什么是外部服务器?您使用的是什么外来数据包装器?如果它不是来自PostgreSQL发行版,你从哪里得到的?您使用的是什么查询(请输入代码)?如果远程服务器支持查询日志记录,那么在使用fdw时,远程服务器上会记录哪些查询?您确实需要提供更多详细信息。特别是,什么是外部服务器?您使用的是什么外来数据包装器?如果它不是来自PostgreSQL发行版,你从哪里得到的?您使用的是什么查询(请输入代码)?如果远程服务器支持查询日志记录,则使用fdw时在远程服务器上记录哪些查询?