PostgreSQL:ALTER TABLE出错...添加唯一约束

6tdlim6h  于 2023-03-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(137)

我试图在Postgres中的一个简单表中添加一个列和一个新的约束。它在关键字UNIQUE上犹豫不决。我已经在我的代码片段和documentation for 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                   
);

我想我忽略了一些简单的东西,但我肯定会感谢你的指点。

ddarikpa

ddarikpa1#

我相信您只是需要为在此语法中添加的唯一约束提供一个名称。
这就是它在这里的样子-https://www.postgresql.org/docs/current/sql-altertable.html
例如,将最后一行改为:

ADD CONSTRAINT friend_parent_unique UNIQUE (friendly_id, obj_parent_id)
63lcw9qa

63lcw9qa2#

根据syntax of ALTER TABLE,当使用关键字CONSTRAINT时,需要为约束指定一个名称,如

ALTER TABLE objects ADD CONSTRAINT objects_friendly_id_obj_parent_id_key UNIQUE (friendly_id, obj_parent_id);

但是,如果希望postgres自动生成约束的名称,也可以完全省略关键字,编写just

ALTER TABLE objects ADD UNIQUE (friendly_id, obj_parent_id);

相关问题