gpt4 book ai didi

arrays - 数组的 Postgres 唯一约束

转载 作者:行者123 更新时间:2023-11-29 11:12:00 25 4
gpt4 key购买 nike

如何对数组中所有值的唯一性创建约束,例如:

CREATE TABLE mytable
(
interface integer[2],
CONSTRAINT link_check UNIQUE (sort(interface))
)

我的排序函数

create or replace function sort(anyarray)
returns anyarray as $$
select array(select $1[i] from generate_series(array_lower($1,1),
array_upper($1,1)) g(i) order by 1)
$$ language sql strict immutable;

我需要将值 {10, 22} 和 {22, 10} 视为相同并在 UNIQUE CONSTRAINT 下检查

最佳答案

我不认为你可以使用带有 unique constraint 的函数但你可以用 unique index .所以给定一个这样的排序函数:

create function sort_array(anyarray) returns anyarray as $$
select array_agg(distinct n order by n) from unnest($1) as t(n);
$$ language sql immutable;

然后你可以这样做:

create table mytable (
interface integer[2]
);
create unique index mytable_uniq on mytable (sort_array(interface));

然后会发生以下情况:

=> insert into mytable (interface) values (array[11,23]);
INSERT 0 1
=> insert into mytable (interface) values (array[11,23]);
ERROR: duplicate key value violates unique constraint "mytable_uniq"
DETAIL: Key (sort_array(interface))=({11,23}) already exists.
=> insert into mytable (interface) values (array[23,11]);
ERROR: duplicate key value violates unique constraint "mytable_uniq"
DETAIL: Key (sort_array(interface))=({11,23}) already exists.
=> insert into mytable (interface) values (array[42,11]);
INSERT 0 1

关于arrays - 数组的 Postgres 唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8443716/

25 4 0
文章推荐: objective-c - Objective - C,在 UIImageView 中显示图像序列的最快方法
文章推荐: python - 使用两个 CSV 文件进行 CSV 查找并生成新文件
文章推荐: ios - 如何在多个 Corona SDK 应用程序之间共享通用代码?
文章推荐: javascript - Safari 移动浏览器没有