簡體   English   中英

PostgreSQL 事務級別保證只讀事務中的外鍵一致性

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

應用程序A (想想導出器)需要從正在運行的 PostgreSQL 數據庫中讀取所有表的所有行。 同時應用程序B (想想 web 應用程序)繼續進行讀寫。

childparent有一個可選的外鍵。

我在使用以下訪問模式時遇到了問題:

  • A : BEGIN TRANSACTION
  • A : SELECT * FROM parent
  • B : BEGIN TRANSACTION
  • BINSERT INTO parent
  • B : INSERT INTO child -- has foreign key to inserted parent
  • BCOMMIT
  • A : 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行?
  • 我是否需要求助於A中的應用程序邏輯來丟棄對parent無效引用的child行?

開始交易A

START TRANSACTION READ ONLY ISOLATION LEVEL REPEATABLE READ;

然后,該事務中的所有語句都將看到數據庫的相同 state(快照),無論並發事務修改了什么。

我添加READ ONLY只是因為您說 A 是,它沒有必要工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM