如何从 PostgreSQL 中的 2 列中获取唯一值
How to get unique values from 2 columns in PostgreSQL
我有一列 "id_a" 和一列 "id_b".
"id_a" 是整数[]类型。
"id_b"是int类型。
我得想办法验证id_a没有更多的值具有相同的id_b
For Example:
id_a {3,4,5} id_b 18
其他示例:
ERROR:
id_a{3,4,5} id_b 18 --> because i have already the value of b with the same values of a
NO ERROR:
id_a{3,4,5} id_b 19
ANOTHER ERROR:
id_a{3} id_b 19
NO ERROR:
id_a{6} id_b 18
您可以使用排除约束,如下所示:
create table mytable (
id_a int[],
id_b int,
exclude using gist(id_a with &&, id_b with =)
);
对于给定的 id_b
。
,这可以防止数组在 id_a
上重叠
insert into mytable values ('{3,4,5}', 18);
-- 1 rows affected
insert into mytable values ('{3,4,5}', 18);
-- ERROR: conflicting key value violates exclusion constraint "mytable_id_a_id_b_excl"
-- DETAIL: Key (id_a, id_b)=({3,4,5}, 18) conflicts with existing key (id_a, id_b)=({3,4,5}, 18).
insert into mytable values ('{3,4,5}', 19);
-- 1 rows affected
insert into mytable values ('{3}', 19);
-- ERROR: conflicting key value violates exclusion constraint "mytable_id_a_id_b_excl"
-- DETAIL: Key (id_a, id_b)=({3}, 19) conflicts with existing key (id_a, id_b)=({3,4,5}, 19).
insert into mytable values ('{6}', 18);
-- 1 rows affected
您可以创建一个 exclusion constraint if you install the btree_gist 扩展:
create table data (id_a int[], id_b int);
alter table data
add constraint check_ids
exclude using gist (id_a with &&, id_b with =);
第一行 - 没问题
insert into data (id_a, id_b) values ('{3,4,5}', 18);
运行 以上再次产生预期的错误。
以下作品:
insert into data (id_a, id_b) values ('{3,4,5}', 19);
然后:
insert into data (id_a, id_b) values ('{3}', 19);
会导致错误
ERROR: conflicting key value violates exclusion constraint "check_ids"
我有一列 "id_a" 和一列 "id_b".
"id_a" 是整数[]类型。
"id_b"是int类型。
我得想办法验证id_a没有更多的值具有相同的id_b
For Example:
id_a {3,4,5} id_b 18
其他示例:
ERROR:
id_a{3,4,5} id_b 18 --> because i have already the value of b with the same values of a
NO ERROR:
id_a{3,4,5} id_b 19
ANOTHER ERROR:
id_a{3} id_b 19
NO ERROR:
id_a{6} id_b 18
您可以使用排除约束,如下所示:
create table mytable (
id_a int[],
id_b int,
exclude using gist(id_a with &&, id_b with =)
);
对于给定的 id_b
。
id_a
上重叠
insert into mytable values ('{3,4,5}', 18);
-- 1 rows affected
insert into mytable values ('{3,4,5}', 18);
-- ERROR: conflicting key value violates exclusion constraint "mytable_id_a_id_b_excl"
-- DETAIL: Key (id_a, id_b)=({3,4,5}, 18) conflicts with existing key (id_a, id_b)=({3,4,5}, 18).
insert into mytable values ('{3,4,5}', 19);
-- 1 rows affected
insert into mytable values ('{3}', 19);
-- ERROR: conflicting key value violates exclusion constraint "mytable_id_a_id_b_excl"
-- DETAIL: Key (id_a, id_b)=({3}, 19) conflicts with existing key (id_a, id_b)=({3,4,5}, 19).
insert into mytable values ('{6}', 18);
-- 1 rows affected
您可以创建一个 exclusion constraint if you install the btree_gist 扩展:
create table data (id_a int[], id_b int);
alter table data
add constraint check_ids
exclude using gist (id_a with &&, id_b with =);
第一行 - 没问题
insert into data (id_a, id_b) values ('{3,4,5}', 18);
运行 以上再次产生预期的错误。
以下作品:
insert into data (id_a, id_b) values ('{3,4,5}', 19);
然后:
insert into data (id_a, id_b) values ('{3}', 19);
会导致错误
ERROR: conflicting key value violates exclusion constraint "check_ids"