我是postgres的新手。我想知道,PostgreSQL 为几个唯一值设置约束的方法是什么(这样每一对都是唯一的)。我应该创建一个INDEX
forbar
和baz
字段吗?
CREATE UNIQUE INDEX foo ON table_name(bar, baz);
如果不是,那么正确的方法是什么?提前致谢。
我是postgres的新手。我想知道,PostgreSQL 为几个唯一值设置约束的方法是什么(这样每一对都是唯一的)。我应该创建一个INDEX
forbar
和baz
字段吗?
CREATE UNIQUE INDEX foo ON table_name(bar, baz);
如果不是,那么正确的方法是什么?提前致谢。
你可以做你已经想到的事情:在两个字段上创建一个唯一的约束。这样,将在幕后创建唯一索引,您将获得所需的行为。另外,如果有必要,可以获取该信息information_schema
以进行一些元数据推断,因为两者都需要是唯一的。我会推荐这个选项。您也可以为此使用触发器,但是对于这个特定要求,唯一的约束要好得多。
如果每个字段都需要自己唯一,则在每个字段上创建唯一索引。如果它们只需要在组合中是唯一的,则在两个字段中创建一个唯一索引。
如果应该,不要忘记将每个字段设置为 NOT NULL。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 不是唯一的。