web-dev-qa-db-ja.com

PostgreSQL:外部キー列のNULL値

PostgreSQLデータベースには、次のテーブルがあります(簡略化されています)。

[。プライマリキー
 fk_quotation_receipt_id bigint REFERENCES quotes(receipt_id)
); 

私の問題は次のようになりました。

以前の見積もりに関連する注文があります(これは、FKフィールドを使用して参照される見積もりにそのような注文を添付できるためです)が、スクラッチからの注文もありますwithout a一致する引用。もちろん、データベースから許可された場合、FKフィールドはNULLになります。残念ながら、違反外部キー制約のために、INSERTステートメントでfk_quotation_receipt_idをNULLに設定しようとするとerrorが返されます。

これらのテーブルを設計するとき、私はまだNULL値を許可するPgSQL 8.2を使用していました。これで9.1.6になりましたが、これはできません。

私が望むのは、オプション(またはnull可能)外部キー制約order_confirmations(fk_quotation_receipt_id)→引用符(receipt_id)です。公式のPgSQLドキュメントにはヒントがありません。他のユーザーが投稿した同様の問題はすでにかなり古いものです。

役に立つヒントをありがとう。

29
Neppomuk

9.3で欠落しているコンマを修正した後、動作します。 9.1でも機能すると確信しています

create table quotations (
    receipt_id bigint not null primary key
);

create table order_confirmations (
    receipt_id bigint not null primary key,
    fk_quotation_receipt_id bigint references quotations (receipt_id)
);

insert into order_confirmations (receipt_id, fk_quotation_receipt_id) values 
    (1, null);
INSERT 0 1
25
Clodoaldo Neto