0
我想修改表約束。從現在起,名字必須是獨一無二的。但是,我想要具有唯一的名稱,只有當給定名稱的行是活動的。所以我添加了列is_active。將UNIQUE約束轉換爲CHECK或觸發器
CREATE TABLE item
(
(...)
name character varying(50) NOT NULL,
is_active boolean NOT NULL DEFAULT true,
CONSTRAINT uc_item_name UNIQUE (name),
(...)
)
我可以刪除唯一約束,並添加觸發器或函數調用,它會這麼做:
- 如果給新名稱未在表回報存在真實的或允許 插入,
- 如果給出至少一行中的新名稱退出,重複執行 ,並檢查是否至少有一個是活動的。如果是 - 失敗插入 否則將行添加到表中。
任何人都可以幫我嗎?這只是我與Postgres的冒險開始。我使用的是9.6版
這就是anwser!謝謝。我只是想知道如果我能夠通過CHECK約束來調用返回布爾值的函數。可能嗎?我問,因爲我認爲這將是實現我的目標的最優雅的方式 –
@Konrad:在默認[隔離級別](https://www.postgresql.org/docs/current/static/transaction-iso html的);兩個使用相同'name'的同時插入不能看到對方,並且兩者都會通過檢查。一個唯一的索引自動處理併發。 –