PostgreSQL 事务级别保证只读事务中外键的一致性

PostgreSQL transaction level guarantees for foreign key consistency in read only transactions

应用程序 A(认为导出器)需要从 运行 PostgreSQL 数据库中读取所有 tables 的所有行。同时,应用程序 B(想想 Web 应用程序)继续进行读写操作。

Table child 有一个可选的外键到 parent

我在使用以下访问模式时遇到了问题:

应用程序 A 中断,因为它读取了无法读取 parentchild。因此我不希望 A 读取 B.

插入的 child

据我了解,REPEATABLE_READ 在这里没有给我任何保证,因为我还没有阅读此交易中的 child table。据我了解,出于同样的原因,这也不被视为幻读。

开始交易A
START TRANSACTION READ ONLY ISOLATION LEVEL REPEATABLE READ;

然后该事务中的所有语句将看到数据库的相同状态(快照),无论并发事务修改了什么。

我添加READ ONLY只是因为你说A是,它没有必要工作。