在postgresql (9.2)中,我有一个具有以下内容的表:
tservice timestamp without time zone NOT NULL,
patient_recid integer NOT NULL我希望对tservice的日期设置一个独特的限制,例如:
constraint service_unique UNIQUE (patient_recid, tservice::date)它在日期转换时产生语法错误。
如何在PostgreSQL中最好地做到这一点?
提亚
发布于 2015-12-23 16:50:59
奇怪的是,PostgreSQL似乎只允许具有唯一约束的列,但是这里不允许表达式。
您可以创建一个唯一的函数索引(作为解决办法),在9.1版中支持表达式索引:
create unique index service_unique
ON table_name(patient_recid, date_trunc('day',tservice));发布于 2017-09-21 09:01:05
如前所述,UNIQUE INDEX运行得很好。对于那些获得“index表达式中的函数必须标记为不可变”错误的人,您可以在索引中修正时区:
CREATE UNIQUE INDEX service_unique ON table_name(patient_recid, date_trunc('day',tservice AT TIME ZONE 'GMT'));发布于 2015-12-23 16:37:26
创建约束时不能转换tservice。
如果禁忌应以"date“类型应用于tservice,则最好将tservice列创建为"date”类型。
您可以像这样更新列的类型:
ALTER TABLE your_table ALTER COLUMN tservice TYPE date;然后添加如下约束:
ALTER TABLE your_table ADD CONSTRAINT service_unique UNIQUE (patient_recid, tservice)https://stackoverflow.com/questions/34439933
复制相似问题