在postgresql中的TIMESTAMP列上应用日期的唯一约束

问题描述 投票:0回答:1

我有一个postgresql表

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 ::
)

我想在这个表上放置唯一约束,使得exp_date和created_at的日期应该是唯一的。问题是created_at列是时间戳而不是日期。

那么有没有办法放置唯一约束,使expire_date和created_at :: date应该是唯一的?

我的尝试是使用 CONSTRAINT user_review_uniq_key UNIQUE (expiry_date, created_at::date)无效。

postgresql unique-constraint sql-timestamp
1个回答
2
投票

如果您不需要创建日期的时区:创建一个唯一索引如下:

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'));

希望这可以帮助 ;)

© www.soinside.com 2019 - 2024. All rights reserved.