[英]PostgreSQL transaction level guarantees for foreign key consistency in read only transactions
應用程序A (想想導出器)需要從正在運行的 PostgreSQL 數據庫中讀取所有表的所有行。 同時應用程序B (想想 web 應用程序)繼續進行讀寫。
表child
對parent
有一個可選的外鍵。
我在使用以下訪問模式時遇到了問題:
BEGIN TRANSACTION
SELECT * FROM parent
BEGIN TRANSACTION
INSERT INTO parent
級INSERT INTO child -- has foreign key to inserted parent
COMMIT
SELECT * FROM child -- I do not want to receive the inserted child here
應用程序A中斷,因為它讀取了一個它無法讀取parent
級的child
級。 因此,我不希望A讀取B插入的child
行。
據我了解, REPEATABLE_READ
在這里沒有給我任何保證,因為我還沒有在這個事務中讀取child
表。 據我了解,出於同樣的原因,這也不被視為幻讀。
SERIALIZABLE
是否保證A不讀取新的child
行?parent
無效引用的child
行?開始交易A
START TRANSACTION READ ONLY ISOLATION LEVEL REPEATABLE READ;
然后,該事務中的所有語句都將看到數據庫的相同 state(快照),無論並發事務修改了什么。
我添加READ ONLY
只是因為您說 A 是,它沒有必要工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.