Ala*_*yne 3 database postgresql
在postgresql(9.2)中,我有一个表:
tservice timestamp without time zone NOT NULL,
patient_recid integer NOT NULL
Run Code Online (Sandbox Code Playgroud)
我希望在tservice 的日期创建一个独特的约束,如:
constraint service_unique UNIQUE (patient_recid, tservice::date)
Run Code Online (Sandbox Code Playgroud)
这会在日期转换时产生语法错误.
如何在PostgreSQL中做得最好?
TIA
奇怪的是,似乎PostgreSQL只允许唯一约束中的列,但这里不允许使用表达式.
您可以创建唯一的功能索引(作为变通方法),从9.1版支持表达式的索引:
create unique index service_unique
ON table_name(patient_recid, date_trunc('day',tservice));
Run Code Online (Sandbox Code Playgroud)
小智 7
如前所述,UNIQUE INDEX效果非常好。对于那些出现“索引表达式中的函数必须标记为 IMMUTABLE”错误的人,您可以修复索引中的时区:
CREATE UNIQUE INDEX service_unique ON table_name(patient_recid, date_trunc('day',tservice AT TIME ZONE 'GMT'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1826 次 |
| 最近记录: |