PostgreSQL约束 - 检查日期和一些正则表达式

时间:2016-06-06 15:49:05

标签: postgresql

此处是我的代码:

CREATE TABLE sektors (
id_sektors  SERIAL PRIMARY KEY,
laukuma_nosaukums varchar(100) UNIQUE,
m2 int CHECK(m2 ~ '^[^0-9]*$')
datums_no date CHECK(datums_no XXX???),
datums_lidz date CHECK(datums_lidz XXX???),
id_koka_veds int NOT NULL REFERENCES koku_veids(id_veids),
id_audzesanas_veids int NOT NULL REFERENCES audzesanas_veids(id_audzesanas_veids),
id_senu_veids int NOT NULL REFERENCES senu_veids(id_senu_veids)
);

我想要实现的目标:

laukuma_nosaukums - 只能包含唯一条目

m2 - 只能包含数字?如果这是对的话,不知道。

datums_no - 不知道如何编写它,但我想这样:我只能输入比当前日期早的日期。

datums_lidz - 也不知道这一点。我想要这样:我只能输入从当前日期起不超过3个月的日期。

1 个答案:

答案 0 :(得分:0)

这应该可以满足日期字段的需要。重要的是,请使用current_date,而不是now()。前者是一个特殊的系统变量。后者将在您创建表时进行评估,一旦日期发生变化就会导致错误。

create table sektors (
  ...
  datums_no date
    CHECK (old_date < current_date),
  datums_lidz date
    CHECK (not_old_date <= (current_date + '3 months'::interval)),
  ...
  );