【问题标题】:Constraint in array character elements in PostgreSQLPostgreSQL 中数组字符元素的约束
【发布时间】:2017-12-07 19:45:32
【问题描述】:

在 PostgreSQL 10.1 中,我创建了下表:

CREATE TABLE nationality_cumulative_criteria
(
    id             smallint NOT NULL,
    country_set    character varying(2)[] NOT NULL,
    number         smallint NOT NULL
);

我希望添加一个约束(排除),例如,它不允许“US”出现在不同的元组中,而只能出现在一个元组中。

我已经检查并发现只有范围和函数的情况,而不是字符元素数组。

蒂亚

【问题讨论】:

    标签: arrays postgresql constraints varchar


    【解决方案1】:

    要完全按照您说的做,请执行以下操作:

     create unique index on nationality_cumulative_criteria 
     (('US'=any(country_set)))
     where 'US'=any(country_set);
    

    这将允许“US”(特别是)在整个表格中只使用一次

    【讨论】:

    • 有什么优雅的方法可以避免写这256次(数组元素的个数)?
    • 我不确定是否存在可以使用此方法工作的功能。但是,您可以轻松构建一个检查所有其他行的触发器,这取决于我们正在谈论的行数,但听起来会少于 256 行,这应该不是很大交易(我也推断此表不会经常更新/插入)。如果您需要示例触发器解决方案,请告诉我。
    • 塔尔。我正在检查 GIN 索引array_ops 是否可以帮助解决这个问题。
    • 不幸的是:SQL Error [0A000]: ERROR: access method "gin" does not support exclusion constraints 使用 GIST:SQL Error [42704]: ERROR: data type character varying[] has no default operator class for access method "gist" Hint: You must specify an operator class for the index or define a default operator class for the data type.
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2017-01-18
    • 2016-06-08
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多