我正在尝试将我们的 PostgreSQL 9.4 数据库从事务级别迁移READ COMMITTED
到REPEATABLE READ
or 或SERIALIZABLE
. 无论哪种情况,我都会遇到一组新的格式错误:
(for both)
ERROR: could not serialize access due to concurrent update
(just for SERIALIZABLE)
ERROR: could not serialize access due to read/write dependencies among transactions
在阅读了有关 SSI 的 wiki 页面和文档后,我彻底了解了可能导致这些错误的错误条件、如何处理它们,甚至是避免它们的最佳实践。
但是,我看不到任何方法可以确定导致它们从 PostgreSQL 可以提供的任何调试输出或任何调试信息中产生的数据依赖性。有没有办法从数据库中获取这些信息,或者通过在回滚时执行额外的查询,或者通过一些日志机制?
拥有这些信息将使我能够进行应用程序级别的更改(锁定、不同的查询等),从而消除一些数据竞争以避免过多的回滚。