我有 2 個帶有外鍵約束的簡單表:
CREATE TABLE a(i integer);
ALTER TABLE a ADD CONSTRAINT pkey_a PRIMARY KEY (i);
CREATE TABLE b(j integer);
ALTER TABLE b add CONSTRAINT fkey_ij FOREIGN KEY (j) REFERENCES a (i);
我想在交易期間推遲約束
START TRANSACTION;
SET CONSTRAINTS fkey_ij DEFERRED;
我收到以下錯誤:
[42809] ERROR: constraint "fkey_ij" is not deferrable
我正在閱讀postgresSET CONSTRAINTS檔案,但不明白為什么這個約束沒有資格被推遲:
目前,只有 UNIQUE、PRIMARY KEY、REFERENCES(外鍵)和 EXCLUDE 約束受此設定影響。NOT NULL 和 CHECK 約束總是在插入或修改行時立即檢查(而不是在陳述句末尾)。還立即檢查尚未宣告 DEFERRABLE 的唯一性和排除性約束。
我是否遺漏了檔案中的某些內容?
uj5u.com熱心網友回復:
A) 檔案鏈接適用于版本 9.1,該版本已經過 EOL(約 5.25 年)。
B)是的,你錯過了下一段:
在創建時,約束被賦予以下三個特征之一:DEFERRABLE INITIALLY DEFERRED、DEFERRABLE INITIALLY IMMEDIATE 或 NOT DEFERRABLE。.
因此,需要將約束創建為 DEFERRABLE 或對其進行更改。請參閱更改表:
ALTER CONSTRAINT 約束名稱 [ DEFERRABLE | 不可延期 ] [ 最初延期 | 最初立即]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427596.html
標籤:PostgreSQL 约束 可延迟约束
上一篇:每天正確存盤、歸檔和洗掉TB的資料-PostgreSQL
下一篇:如何加入兩個結果
