2012-02-05 20 views
4

私のdelete文に問題があります。postgresqlとDelete文が外部キー制約に違反しています

私は2つのテーブルがあります:私はテーブルvehicule_uidで参照する行が保たれていることを望むテーブルvehicule_loanからvehiculeを削除すると

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

を。

は、しかし、私は1つを削除しようとすると、私はこのエラーを取得: を私は何を指しているでしょうvehicule_uidにテーブルvehicule_loanからvehiculevehiculeを削除した後:

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

を私はエラーを理解すると思います。

しかし、行を維持する方法はvehicule_uidですか?

+1

外来キーでの宣言には「vehicule(vehicule)」がありますが、車両テーブルはありません! – zambotn

+0

@ user1089668、私は間違いで "vehicule_uid"が "vehicule_loan"を参照していることがわかるので、これはタイプミスです。 – danihp

+0

オススメのエラーです。 –

答えて

5

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

私は章5.3. Constraints from the PostgreSQL manualを引用:

There are two other options: SET NULL and SET DEFAULT. These cause the referencing columns to be set to nulls or default values, respectively, when the referenced row is deleted.

は、次のようになります。この設定で

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

を、あなたはvehicule_uidvehicule_loanすべての参照行の行を削除する場合は、データベース内に残ります。

+0

質問からエラーをコピーしています。 fkの制約は 'vehicule_loan'テーブルについて話している間に' vehicule'テーブルを参照します。 –

+1

@ErwinBrandstetter、あなたの予約についての話です。私の答えで今修正されました。 OPと私は 'vehicule_loan'を' vehicle'に変更していますが、これは大きな問題ではなく、タイプミス(誤植)だけです。 Raiseエラーは 'vehicule_uid'テーブルについても述べています。つまり、実際のデータベースの外部キーはうんざりしています。あなたが同意する? – danihp

+0

+1私は同意し、あなたの答えは、OPが必要とするものであると思います。私はマイナーな改善を適用するために自由を取ったし、また問題を解決しました。 –

関連する問題