postgresql如何在整数数组上创建排除约束以防止数组值重叠?

postgresql如何在整数数组上创建排除约束以防止数组值重叠?,postgresql,postgresql-9.5,Postgresql,Postgresql 9.5,当我在表上添加排除约束以防止int[]中有两行值相同时,我收到以下错误消息: 数据类型integer[]没有访问方法“gist”的默认运算符类 我有一张这样的桌子: CREATE TABLE x ( id SERIAL PRIMARY KEY, ref_id INT REFERENCES x, purchase_ids INT[], EXCLUDE USING GIST(purchase_ids WITH &&) WHERE(ref_id IS NULL) );

当我在表上添加排除约束以防止int[]中有两行值相同时,我收到以下错误消息:

数据类型integer[]没有访问方法“gist”的默认运算符类

我有一张这样的桌子:

CREATE TABLE x (
  id SERIAL PRIMARY KEY,
  ref_id INT REFERENCES x,
  purchase_ids INT[],
  EXCLUDE USING GIST(purchase_ids WITH &&) WHERE(ref_id IS NULL)
);

我的同事通过创建一个扩展来解决这个问题:

CREATE EXTENSION IF NOT EXISTS intarray;

创建此扩展后,我可以添加排除约束,以防止数组中两行具有相同元素。

我到处查看,似乎以前没有多少人尝试过。PostgreSQL的手动页面在最后有一个例子,它似乎正是您所需要的(int[]的GIST操作符类),但是它在我的服务器上失败了。也许你会有更好的运气!谢谢Ziggy,我也有一个坏运气。当然,您可以非常简单地解决这个问题,方法是使用带有
主键的表作为
购买ID
,而不是
int[]
。你真的需要将数据存储在数组中吗?@Patrick如果将数据存储在数组中就太好了。我的同事通过添加一个intarray扩展来解决这个问题,该扩展支持exclude约束中的重叠操作。