我正在使用带有可序列化事务的 PostgreSQL 9.1(类似于谓词锁定)并且我遇到了错误could not serialize access due to read/write dependencies among transactions
。我相信这是由于访问包含不需要由可序列化事务保护的数据的表引起的。但是,其余代码逻辑依赖于可序列化事务支持,因此我需要对其余表使用可序列化事务。
是否可以配置 PosgreSQL、数据库模式或事务,以便我可以启动可序列化事务并仍然声明表 XYZ 中的任何序列化失败都不值得中止(回滚)事务?如果是这样,该怎么做?
我知道的问题的唯一解决方案是将所有不重要的表放在另一个数据库中,并使用与该数据库的并行连接和事务。我希望有一个更简单的解决方案。我的应用程序是用 PHP 编写的,以防万一。
更新:我正在寻找额外的性能;代码会自动重试失败的事务,经过足够多的重试后,它最终会通过,所以理论上我很好。在实践中,性能很糟糕。