2017-08-13 23 views
0

私は以下のような単純なテーブルを持っています。Postgresql:外部キー制約のためのアクションを変更する

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) 
) 

しかし、その後、私はON DELETEアクションを追加する必要があることがわかったが、デフォルトではNO ACTIONです。私はアクションをどのように変更するのか分かりませんでした。

今、私はDROP & ADD

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; 

に持っているので、外部キー制約のアクションを変更するための正しい構文は何ですか?

+0

? –

+0

作品はありませんが、変更したいと思います。私はあらゆる種類のエラーを受け取ります。 "FOREIGN近くの" ON "の近くの構文エラー" ...これを諦めるまで1時間を無駄にして、このことを変える正しい構文が何か不思議ではありません。 – Ben

答えて

2

まあ、これは直接FOREIGN KEY制約を変更していない、これが唯一の文ですが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; 
+0

ありがとう、あなたが正しいように見えます。制約オプションを変更する方法はないようです。 – Ben