【问题标题】:postgresql how to create a exclude constraint on integer array to prevent array value overlap?postgresql如何在整数数组上创建排除约束以防止数组值重叠?
【发布时间】:2016-05-20 06:11:10
【问题描述】:

当我在表上添加排除约束以防止两行在 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)
);

【问题讨论】:

  • 我到处看了看,似乎以前没有多少人尝试过。 PostgreSQL 的CREATE OPERATOR CLASS 手册页最后有一个示例,说明它似乎正是您所需要的(int[] 的 GIST 运算符类),但是它在我的服务器上失败了。也许你会有更好的运气!
  • 谢谢 Ziggy,我也倒霉了
  • 您当然可以通过使用带有PRIMARY KEY 的表来代替purchase_ids 而不是int[] 来非常简单地解决这个问题。你真的需要将数据存储在数组中吗?
  • @Patrick 如果将数据存储在数组中,那就太好了。我的同事通过在排除约束中添加一个支持重叠操作的 intarray 扩展来解决这个问题。

标签: postgresql postgresql-9.5


【解决方案1】:

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

CREATE EXTENSION IF NOT EXISTS intarray;

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

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多