moj*_*-de 7 sql postgresql null constraints range
我有一个包含一个'有效直到'日期的列的表,我想确保只能在表中的一行中将其设置为null.是否有捷径可寻?
我的表看起来像这样(postgres):
CREATE TABLE 123.myTable(
some_id integer NOT NULL,
valid_from timestamp without time zone NOT NULL DEFAULT now(),
valid_until timestamp without time zone,
someString character varying)
Run Code Online (Sandbox Code Playgroud)
some_id而且valid_from是我的PK.我希望没有人在列valid_until中输入一个空值的行,如果此PK已经有一行为null.
谢谢
在 PostgreSQL 中,有两种基本方法。
'infinity'而不是空。然后你的独特约束就会按预期工作。或者如果你不能这样做:CREATE UNIQUE INDEX null_valid_from ON mytable(someid) where valid_until IS NULL这两种方法我都用过。我发现通常第一种方法更干净,它允许您使用范围类型并更好地排除较新版本的 PostgreSQL 中的约束(以确保基于给定的 someid 没有两个时间范围重叠),bt 第二种方法通常在以下情况下很有用:首先是做不到的。
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |