【问题标题】:with isolation level = serializable will Postgres automatically restart the failed transaction or do I have to do it myself隔离级别 = 可序列化 Postgres 会自动重启失败的事务还是我必须自己做
【发布时间】:2018-11-30 19:09:24
【问题描述】:

我运行了一个存储过程

....
select xxxx
if xxxx !found 
   insert xxxxx
do stuff with xxx
...

显然这里有一场比赛。我天真的期望是,如果我正确设置了事务隔离级别(可序列化),那么比赛将自动解决(通过透明重启,就像我使用过的其他数据库系统一样)。情况似乎并非如此。

我想我必须自己检测 40001 错误并重新提交失败的交易。

正确吗?有没有我可以在某处设置的标志说“请用魔法来做”?

【问题讨论】:

    标签: postgresql transaction-isolation


    【解决方案1】:

    是的,您必须检测 SQLSTATE 40001 并自己重复该事务。

    数据库无法访问重复交易所需的所有信息。事务日志存储对数据库所做的物理更改,而不是 SQL 语句。

    如果这是一个很长的事务并且自启动以来一直存在检查点,那么 PostgreSQL 甚至可能不再有事务日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2011-01-31
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多