Postgresql 如何在PostgresSQL中查找文本数组中的重叠

Postgresql 如何在PostgresSQL中查找文本数组中的重叠,postgresql,Postgresql,我需要向某个列添加约束,为此我使用了string_to_数组函数,然后我需要在&&运算符的帮助下检查一些重叠,但我得到一个错误:数据类型text[]没有访问方法“gist”的默认运算符类。我怎么能修好它?也许我需要添加一些扩展?或者Posgress不支持这种情况您的表可能如下所示: CREATE TABLE texts ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, vals text[] NOT NULL ); 如果您正

我需要向某个列添加约束,为此我使用了string_to_数组函数,然后我需要在&&运算符的帮助下检查一些重叠,但我得到一个错误:数据类型text[]没有访问方法“gist”的默认运算符类。我怎么能修好它?也许我需要添加一些扩展?或者Posgress不支持这种情况

您的表可能如下所示:

CREATE TABLE texts (
   id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
   vals text[] NOT NULL
);
如果您正确地规范化了表,那么解决方案将很简单:

CREATE TABLE texts (
   id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
);

CREATE TABLE texts_vals (
   id bigint REFERENCES texts NOT NULL,
   val text PRIMARY KEY
);
唯一性是自动保证的

对于文本数组,它不能用简单的约束来完成


您可以创建一个检查条件的触发器,但是通过并发数据修改,除非您使用可序列化的隔离级别。

@LaurenzAlbe,不幸的是,GIN不支持排除约束,但我需要创建它。您可以共享表定义吗?@LaurenzAlbe我不能,但我可以解释,例如,我有一个名为col的列,在该列中存储以下文本:“a,b,c”“x,e”“d,j”。我需要做exclude约束以避免插入已经存在的数据,所以我不能添加“a,n”,因为“a”已经存在exists@AndriiStasiuk啊。排除约束需要索引,该索引不适用于
text[]
。一个普通的过滤器会坏的