我正在尝试向 Postgres 中的一个简单表添加一列和一个新约束。它对关键字 UNIQUE 犹豫不决。我在我的代码片段和 ALTER TABLE 的文档之间来回切换,但我看不出有什么问题:
mint=> ALTER TABLE objects
mint-> ADD COLUMN IF NOT EXISTS obj_parent_id int REFERENCES obj_id, --NULL OK
mint-> ADD CONSTRAINT UNIQUE (friendly_id, obj_parent_id)
mint-> ;
ERROR: syntax error at or near "UNIQUE"
LINE 3: ADD CONSTRAINT UNIQUE (friendly_id, obj_parent_id)
^
作为参考,现有表是由以下人员创建的:
CREATE TABLE IF NOT EXISTS objects (
obj_id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1000),
obj_type VARCHAR NOT NULL,
friendly_id VARCHAR,
last_changed timestamp DEFAULT now(),
PRIMARY KEY (obj_id),
UNIQUE (obj_id, obj_type), --required for foreign key in object_props
UNIQUE (obj_type, friendly_id),
FOREIGN KEY (obj_type) REFERENCES object_types(obj_type) ON UPDATE CASCADE
);
我想我忽略了一些简单的事情,但我肯定会很感激你的指点。
我相信您只需要为在此语法中添加的唯一约束提供一个名称。
这就是这里的样子 - https://www.postgresql.org/docs/current/sql-altertable.html.
例如将您的最后一行更改为:
ADD CONSTRAINT friend_parent_unique UNIQUE (friendly_id, obj_parent_id)