Применение уникального ограничения даты к столбцу TIMESTAMP в postgresql - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть таблица 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 ::
)

Я хочу наложить уникальные ограничения на эту таблицу таким образом, чтобы expiry_date и dateed create_at были уникальными. Проблема в столбце create_at - это отметка времени, а не дата.

так есть ли способ установить уникальное ограничение, чтобы expire_date и creation_at :: date должны быть уникальными?

Моя попытка была использовать
CONSTRAINT user_review_uniq_key UNIQUE (expiry_date, created_at::date), что недействительно.

1 Ответ

2 голосов
/ 25 апреля 2019

Если вам не нужен часовой пояс для созданной вами даты: создайте уникальный индекс следующим образом:

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

Надеюсь, это поможет;)

...