postgreSQL-在某个时间戳后使列唯一



这是我的用例。

我正在使用Postgres 13.3

我有一个people表,它位于具有多列的draft模式下。。CCD_ 4和created_。该电子邮件本应是唯一的,但事实并非如此。如果我将表格更改为唯一的,之前插入了重复的电子邮件,我不想删除所有重复的电子邮件而丢失数据。我可以在现在或当前时间戳之后设置使电子邮件唯一的约束吗?

我已经尝试过了,这显然是一个语法错误

ALTER TABLE draft.people ADD UNIQUE (email) WHERE created_at > timestamp()

我还试图添加一个检查约束,但它抛出了一个语法错误。。我应该写一个在插入之前触发的函数吗?

这只能使用唯一索引来完成。

但是,不能在WHERE条件中使用current_timestampnow()。你需要输入一个常数值:

create unique index on draft.people (email) 
WHERE created_at > timestamp '2022-08-12 22:00:00';