【问题标题】:Can a Postgres constraint limit a table to one true value, but many false values?Postgres 约束是否可以将表限制为一个真值,但有多个假值?
【发布时间】:2017-06-16 10:12:56
【问题描述】:

我已阅读:Could I make a column in a table only allows one 'true' value and all other rows should be 'false' - 在 Postgres 中也可以使用同样的方法,但如果可能的话,我想要一个单表解决方案。

我有一个 logon_state 表:

CREATE TABLE logon_state (
    username VARCHAR(20) references users,
    region region NOT NULL,
    channel channel NOT NULL,
    ts TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
    callsign VARCHAR(10) NOT NULL,
    live BOOLEAN NOT NULL,
    PRIMARY KEY (username, region, channel)
);

如何添加约束或唯一键,以便对于每个 region/channel 组合,只有一行可能具有 livetrue 而无限数量的行可以具有 live false的值?

【问题讨论】:

    标签: postgresql constraints


    【解决方案1】:

    这可以通过部分唯一索引来完成:

    create unique index on logon_state (region, chanel)
      where live;
    

    这假设域(或类型)regionchanel 可以正确比较。如果这些是具有多个字段的记录类型,这可能不起作用。

    【讨论】:

    • regionchannel 是枚举。这会破坏你的答案吗?
    • 枚举很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多