PostgreSQL 在变更表上添加 EXCLUDE 约束

Rod*_*igo 4 sql postgresql

我正在尝试向我现有的表之一添加 EXCLUDE 约束,这是我正在运行的 sql:

ALTER TABLE appointment_service
  ADD COLUMN start_time bigint,
  ADD COLUMN end_time bigint,
  EXCLUDE USING gist (
            professional_id WITH =,
            int8range(start_time, end_time) WITH &&
  ),
  ADD COLUMN professional_id text REFERENCES professionals ON DELETE CASCADE ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误。

ERROR:  syntax error at or near "EXCLUDE"
LINE 4:   EXCLUDE USING gist (
Run Code Online (Sandbox Code Playgroud)

完成此操作的正确 SQL 语法是什么?

a_h*_*ame 7

您需要单独添加排除约束。

首先添加列:

ALTER TABLE appointment_service
  ADD COLUMN start_time bigint,
  ADD COLUMN end_time bigint,
  ADD COLUMN professional_id text 
     REFERENCES professionals ON DELETE CASCADE ON UPDATE CASCADE;
Run Code Online (Sandbox Code Playgroud)

然后添加约束:

ALTER TABLE appointment_service
  add constraint unique_professional_id
  EXCLUDE USING gist (
            professional_id WITH =,
            int8range(start_time, end_time) WITH &&
  )
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,在单个语句中也可能:`create table t(x int); 更改表 t 添加列 y 文本,添加约束 foo exclude (y with =);` (3认同)