【问题标题】:Postgres Upgrade from 9.5 to 12 cannot execute UPDATE in a read-only transactionPostgres 从 9.5 升级到 12 不能在只读事务中执行 UPDATE
【发布时间】:2021-03-10 17:13:35
【问题描述】:

自从从 9.5 迁移到 12 以来,我们在数据库日志中看到了很多错误。正在运行的查询是一个基本的更新语句,它会更改用户登录的日期。

2021-03-03 09:23:43.235 CET [18820] 错误:无法在只读事务中执行更新

当我们使用旧版本的 postgres 时,我们没有看到这些错误。

我已经检查了 default_transaction_read_only 并且设置为 off 是正确的。

为什么我现在会看到这个?

【问题讨论】:

    标签: postgresql postgresql.conf


    【解决方案1】:

    请确认您不在只读事务中:

    SHOW default_transaction_read_only;
    SHOW transaction_read_only;
    

    如果第一个是off,第二个是on,则您必须明确启动了一个只读事务

    BEGIN READ ONLY;
    

    如果你不在只读事务中,唯一的解释是数据库处于恢复模式。

    也许您连接到流复制备用服务器。

    要验证,看看以下是否返回“true”:

    SELECT pg_is_in_recovery();
    

    【讨论】:

    • 我们只有 1 个 postgres 数据库服务器。怀疑应用程序方面的问题。关于我们为什么看到这个,我还有什么可以检查的吗?谢谢@laurenz-albe
    • 没有。我确定这就是问题所在。请参阅我的扩展答案。
    • 嗨@laurenz-albe 在扩展答案中运行了查询,数据库未处于恢复模式。
    • 我在答案中添加了更多诊断材料。也许您在没有意识到的情况下启动了一个只读事务。
    • 感谢@laurenz-albe,当我从本地运行相同的查询到应用程序运行的同一个数据库时,它运行良好。 default_transaction_read_only 和 transaction_read_only 的结果都返回为关闭。我更倾向于应用程序的执行方式。
    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多