SQL。唯一索引中的类型划分[英] SQL: Typecast in a Unique Index

本文是小编为大家收集整理的关于SQL。唯一索引中的类型划分的处理方法,想解了SQL。唯一索引中的类型划分的问题怎么解决?SQL。唯一索引中的类型划分问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

CREATE TABLE foo (
    dt AS DATE,
    ts AS TIMESTAMP
);

在 ts 的日期值每个 dt 出现一次的情况下,创建唯一约束的正确方法是什么?示例:

dt         | ts
2010-01-02 | 2010-01-02 17:19:08
2010-01-02 | 2011-11-11 01:01:01
2010-01-02 | 2011-11-11 17:19:08 -- would error on insert (already a 2011-11-11)

尝试:

  1. 语法无效,但我想要达到的效果:

    CREATE UNIQUE INDEX unique_tsdate_per_dt ON foo(dt,ts::date);
    
  2. 不完整的尝试 - 可能是子查询?

    CREATE UNIQUE INDEX unique_tsdate_per_dt ON foo(dt) WHERE ts::date -- ?
    

推荐答案

我想你正在寻找 ::date cast 的函数形式:

CREATE UNIQUE INDEX unique_tsdate_per_dt ON foo(dt, date(ts));

然后你会得到这样的结果:

=> insert into foo (dt, ts) values ('2010-01-02', '2010-01-02 17:19:08');
=> insert into foo (dt, ts) values ('2010-01-02', '2011-11-11 01:01:01');
=> insert into foo (dt, ts) values ('2010-01-02', '2011-11-11 17:19:08');
ERROR:  duplicate key value violates unique constraint "unique_tsdate_per_dt"
DETAIL:  Key (dt, date(ts))=(2010-01-02, 2011-11-11) already exists.

本文地址:https://www.itbaoku.cn/post/1764086.html