如何保证两列/数组中任何整数的唯一性?
示例:我创建一个表并在其中插入一行:
CREATE TABLE mytest(a integer NOT NULL, b integer NOT NULL);
INSERT INTO mytest values (1,2);
Run Code Online (Sandbox Code Playgroud)
我UNIQUE INDEX应该创建什么以不允许添加以下任何值
INSERT INTO mytest values (1,3); # because 1 is already there
INSERT INTO mytest values (3,1); # because 1 is already there
INSERT INTO mytest values (2,3); # because 2 is already there
INSERT INTO mytest values (3,2); # because 2 is already there
Run Code Online (Sandbox Code Playgroud)
如果它有所帮助,我可以有两个元素的数组而不是两列.
当然,我可以发明一些解决方法,以下是我的想法:
unique index那里,并使用事务向两个表添加值.如果该数字不唯一,则不会将其添加到第二个表中,并且事务失败id-of-the-pair.但我希望有一个表,我需要一行,其中包含两个元素.那可能吗?
小智 6
您可以在表格上使用排除约束以及intarray来快速执行重叠数组的搜索:
CREATE EXTENSION intarray;
CREATE TABLE test (
a int[],
EXCLUDE USING gist (a gist__int_ops WITH &&)
);
INSERT INTO test values('{1,2}');
INSERT INTO test values('{2,3}');
>> ERROR: conflicting key value violates exclusion constraint "test_a_excl"
>> DETAIL: Key (a)=({2,3}) conflicts with existing key (a)=({1,2}).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |