PostgreSQL:更改外键约束的操作

Ben*_*Ben 5 sql postgresql constraints foreign-keys

我有一个简单的表格,如下所示。

create table chemlab.rule_header (
    id           serial PRIMARY KEY,
    name         varchar(50),
    grade        varchar(20),
    class_tag    varchar(20),    --tag added to sammple if match
    parent_id    int REFERENCES chemlab.rule_header(id) DEFAULT NULL,
    unique( grade, class_tag )
)
Run Code Online (Sandbox Code Playgroud)

但是之后,我发现我需要添加ON DELETE操作,默认值为NO ACTION。我不知道如何更改操作。

现在我必须DROPADD

ALTER table chemlab.rule_header 
    DROP CONSTRAINT rule_header_parent_id_fkey ;
ALTER TABLE rule_header  
    ADD CONSTRAINT rule_header_parent_id_fkey 
    FOREIGN KEY (parent_id) REFERENCES chemlab.rule_header(id) ON DELETE RESTRICT;
Run Code Online (Sandbox Code Playgroud)

那么,改变对外键约束的操作的正确语法是什么?

Oto*_*dze 7

那么,这不能直接改变外键约束和有DROPADD的是,虽然这仅仅是一个语句:

ALTER table  chemlab.rule_header 
    DROP CONSTRAINT rule_header_parent_id_fkey,
    ADD CONSTRAINT rule_header_parent_id_fkey 
    FOREIGN KEY (parent_id) REFERENCES chemlab.rule_header(id) ON DELETE RESTRICT;
Run Code Online (Sandbox Code Playgroud)