应用程序--(思考导出程序)需要从正在运行的PostgreSQL数据库中读取所有表的所有行。同时,Application B (think应用程序)继续进行读写操作。
表child有一个可选的parent外键。
我遇到了以下访问模式的问题:
BEGIN TRANSACTIONSELECT * FROM parentBEGIN TRANSACTIONINSERT INTO parentINSERT INTO child -- has foreign key to inserted parentCOMMITSELECT * FROM child -- I do not want to receive the inserted child here应用程序--中断,因为它读取无法读取parent的child。因此,我不希望A读取B插入的child行。
据我所知,REPEATABLE_READ在这里没有给我任何保证,因为我还没有在这个事务中读取child表。据我所知,出于同样的原因,这也不是一个幻影。
SERIALIZABLE保证A不读取新的child行?E 263中的应用逻辑,以丢弃引用无效的<child>D64行?发布于 2021-03-26 09:04:56
启动事务A与
START TRANSACTION READ ONLY ISOLATION LEVEL REPEATABLE READ;然后,该事务中的所有语句都将看到数据库的相同状态(快照),而不管并发事务修改了什么。
我添加READ ONLY只是因为你说A是,它没有必要工作。
https://stackoverflow.com/questions/66807351
复制相似问题