簡體   English   中英

在PostgreSQL中為兩個唯一字段設置約束

[英]Setting constraint for two unique fields in PostgreSQL

我是Postgres的新手。 我想知道,PostgreSQL如何為幾個唯一值設置約束(以便每個對都是唯一的)。 我應該為barbaz字段創建INDEX嗎?

CREATE UNIQUE INDEX foo ON table_name(bar, baz);

如果沒有,那么正確的方法是什么? 提前致謝。

您可以執行已經在想的事情: 在兩個字段上創建唯一約束 這樣,將在幕后創建唯一索引 ,您將獲得所需的行為。 另外,該信息可以由information_schema提取,以根據需要進行元數據推斷,因為兩者都必須是唯一的。 我會推薦這個選項。 您也可以為此使用觸發器,但是對於此特定要求, 唯一約束會更好。

如果每個字段本身都需要唯一,則在每個字段上創建唯一索引。 如果它們僅需要在組合中唯一,則可以在兩個字段之間創建一個唯一索引。

如果需要,請不要忘記將每個字段設置為“非空”。 NULL永遠都不是唯一的,因此可能會發生以下情況:

create table test (a int, b int);
create unique index test_a_b_unq on test (a,b);
insert into test values (NULL,1);
insert into test values (NULL,1);

並沒有錯誤。 因為兩個NULL不是唯一的。

暫無
暫無

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

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