Postgresql 从postgres 9.6.6中移除pg_锁,无任何PID
我们有一个任务被卡住了,所以我用SELECT pg_cancel_backend终止了这个任务。然而,任务持有的锁没有消失,现在我的一个表被锁定 我试图在表上运行COPY命令,但它被wait\u event\u type=Lock卡住了 正在使用的系统: 服务器:AWS RDS db.m4.xlarge DB:PostgreSQL 9.6.6 从pg_锁中选择* 从pg_prepared_xacts中选择*,其中事务=24019935 我已经尝试执行中建议的步骤,但它没有显示任何pgid 我还尝试重新启动数据库,但锁仍然存在 有人能帮我弄清楚怎么把这把锁弄掉吗Postgresql 从postgres 9.6.6中移除pg_锁,无任何PID,postgresql,amazon-rds,postgresql-9.6,Postgresql,Amazon Rds,Postgresql 9.6,我们有一个任务被卡住了,所以我用SELECT pg_cancel_backend终止了这个任务。然而,任务持有的锁没有消失,现在我的一个表被锁定 我试图在表上运行COPY命令,但它被wait\u event\u type=Lock卡住了 正在使用的系统: 服务器:AWS RDS db.m4.xlarge DB:PostgreSQL 9.6.6 从pg_锁中选择* 从pg_prepared_xacts中选择*,其中事务=24019935 我已经尝试执行中建议的步骤,但它没有显示任何pgid 我还
谢谢以防万一,其他可怜的家伙也会陷入类似的境地。这是我最后的收获 PS:我不知道为什么在问题的评论中提到重启时锁没有消失 回滚准备从pg_PREPARED_xacts中选择gid 说明:由于某些原因,即使在终止PID并重新启动RDS服务器之后,准备好的事务也从未正确回滚。可能RDS重新启动了一些有趣的操作,而不是完全重新启动数据库。在我手动回滚准备好的事务后,该事务最终被删除,锁被释放
in提到的建议最终帮助我修复了它。我不相信重新启动服务器后锁仍然存在。如果是这样的话,您就有一些守护进程在启动后立即创建了一个新锁。在这种情况下,transactionid应该是不同的。锁无法在数据库服务器重新启动后继续存在,这也是我的理解。但是我已经重新启动了3次RDS,上面提到的查询结果仍然相同。
locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted | fastpath
--------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-------+------------------+---------+----------
relation | 16390 | 19694 | | | | | | | | -1/24019935 | | RowExclusiveLock | t | f
transactionid | | | | | | 24019935 | | | | -1/24019935 | | ExclusiveLock | t | f
transaction | gid | prepared | owner | database
------------+------------------------------+------------------------------+----------+----------
24019935 | PGDIRTY:dirty_state::9994733 | 2018-06-27 13:40:12.88981-08 | postgres | pg