4

削除ステートメントに問題があります。

私は2つのテーブルを持っています:

table vehicule_loan(
    vehicule TEXT NOT NULL UNIQUE,
);

table vehicule_uid (
    id UUID NOT NULL DEFAULT uuid_generate_v4(),
    vehicule TEXT NOT NULL REFERENCES vehicule_loan(vehicule) ON DELETE NO ACTION
);

vehiculeテーブルからを削除するとき、テーブルvehicule_loan内の参照行をvehicule_uid保持する必要があります。

しかし、1つを削除しようとすると、次のエラーが発生します。

ERROR:  update or delete on table "vehicule_loan" violates foreign key constraint "vehicule_uid_vehicule_fkey" on table "vehicule_uid"

私はエラーを理解していると思います:vehiculeテーブルからaを削除した後vehicule_loanvehiculeinvehicule_uidは何も指しません。

しかし、行を保持する方法はありvehicule_uidますか?

4

1 に答える 1

6

外部キー属性に値を許可NULLし、外部キー制約をとして定義する必要がありますON DELETE SET NULL

5.3章を引用します。PostgreSQLマニュアルからの制約

他に2つのオプションがあります:SETNULLとSETDEFAULT。これらにより、参照される行が削除されると、参照する列がそれぞれnullまたはデフォルト値に設定されます。

このように見える可能性があります:

table vehicule_uid (
    id uuid NOT NULL DEFAULT uuid_generate_v4(),
    vehicule text REFERENCES vehicule_loan(vehicule) ON DELETE SET NULL
);

この設定では、vehicule_loanすべての参照行の行を削除するvehicule_uidと、データベースに残ります。

于 2012-02-05T16:19:18.620 に答える