在 postgresql 的 TIMESTAMP 列上应用日期的唯一约束
Applying unique constraint of date on TIMESTAMP column in postgresql
我有一个 postgresql table 作为
CREATE TABLE IF NOT EXISTS table_name
(
expiry_date DATE NOT NULL,
created_at TIMESTAMP with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
CONSTRAINT user_review_uniq_key UNIQUE (expiry_date, created_at::date) -- my wrong attempt of using ::
)
我想以 expiry_date 和 created_at 的日期应该唯一的方式对此 table 施加唯一约束。问题是 created_at 列是时间戳而不是日期。
那么有什么方法可以设置唯一约束,使得 expire_date 和 created_at::date 应该是唯一的?
我的尝试是使用
CONSTRAINT user_review_uniq_key UNIQUE (expiry_date, created_at::date)
无效。
如果您的创建日期不需要时区:创建一个唯一索引如下:
create unique index idx_user_review_uniq_key on table_name (expiry_date, cast(created_at as date));
如果你非常需要一个时区,那么你需要使用一个小技巧 (https://gist.github.com/cobusc/5875282) :
create unique index idx_user_review_uniq_key on table_name (expiry_date, date(created_at at TIME zone 'UTC'));
我有一个 postgresql table 作为
CREATE TABLE IF NOT EXISTS table_name
(
expiry_date DATE NOT NULL,
created_at TIMESTAMP with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
CONSTRAINT user_review_uniq_key UNIQUE (expiry_date, created_at::date) -- my wrong attempt of using ::
)
我想以 expiry_date 和 created_at 的日期应该唯一的方式对此 table 施加唯一约束。问题是 created_at 列是时间戳而不是日期。
那么有什么方法可以设置唯一约束,使得 expire_date 和 created_at::date 应该是唯一的?
我的尝试是使用
CONSTRAINT user_review_uniq_key UNIQUE (expiry_date, created_at::date)
无效。
如果您的创建日期不需要时区:创建一个唯一索引如下:
create unique index idx_user_review_uniq_key on table_name (expiry_date, cast(created_at as date));
如果你非常需要一个时区,那么你需要使用一个小技巧 (https://gist.github.com/cobusc/5875282) :
create unique index idx_user_review_uniq_key on table_name (expiry_date, date(created_at at TIME zone 'UTC'));