【问题标题】:Lock table on postgresql 9.6在 postgresql 9.6 上锁定表
【发布时间】:2021-07-26 14:36:05
【问题描述】:

我是 postgres 管理的新手,当 developerper 运行 LOCK TABLE tab1;PREPAREDstatement 时,postgres 默认使用 ACCES EXCLUSIVE。我的问题是,即使在重新启动 postgres 和 pg_lock 之后,在查看 pg_prepared_xactpg_locks 一周后,表中的锁定仍然存在,就像:

 vXID                 mode
-1/192836             AccessExclusiveLock
Name               DATABASE                  Owner             XID          prepared at
                   db1                       postgres          192836       20-07-2021

我会知道为什么 LOCK 还在这里?以及如何解决? vXID 中的 -1 是什么意思?因为我什至无法在tab1上显示我的数据

【问题讨论】:

    标签: postgresql database-administration postgresql-9.6


    【解决方案1】:

    使用 PREPARED 语句

    准备好的事务和准备好的语句是非常不同的东西。您在这里拥有的是准备好的交易。 准备好的事务在重启后幸存下来。您需要在 pg_prepared_xacts 中找到它的“gid”,然后手动提交它或 roll it back。如果您不是有意使用准备好的事务,则应设置 max_prepared_transactions =0,这样就不会再发生这种情况。如果您有意使用它们,则需要学习如何处理它们。

    【讨论】:

    • 是的,它有效!我使用ROLLBACK PREPARED 来修复它。我没有使用prepared,开发者使用了,是的,他使用的是PREPARED TRANSACTION。
    • 我会知道xVID中-1的含义吗?
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2021-07-29
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多