在postgresql(9.2)中,我有一个表格:
std::unique_ptr
我希望在tservice的 date 上创建一个唯一约束,例如:
tservice timestamp without time zone NOT NULL,
patient_recid integer NOT NULL
在日期转换时产生语法错误。
如何在PostgreSQL中做得最好?
TIA
答案 0 :(得分:6)
奇怪的是,似乎PostgreSQL仅允许唯一约束中的列,但此处不允许使用表达式
您可以创建唯一的功能索引(作为变通方法),版本9.1支持表达式索引:
create unique index service_unique
ON table_name(patient_recid, date_trunc('day',tservice));
答案 1 :(得分:2)
如前所述,UNIQUE INDEX
效果很好。
对于那些得到“索引表达式中的函数必须标记为IMMUTABLE”的错误,您可以在索引中修复时区:
CREATE UNIQUE INDEX service_unique ON table_name(patient_recid, date_trunc('day',tservice AT TIME ZONE 'GMT'));
答案 2 :(得分:1)
创建约束时无法转换tservice。
如果约束条件应该作为“日期”类型应用于服务,您也可以将tservice列创建为“date”类型。
您可以像这样更新列的类型:
ALTER TABLE your_table ALTER COLUMN tservice TYPE date;
然后像这样添加约束:
ALTER TABLE your_table ADD CONSTRAINT service_unique UNIQUE (patient_recid, tservice)