web-dev-qa-db-fra.com

PostgreSQL: valeur NULL dans la colonne de clé étrangère

Dans ma base de données PostgreSQL, j'ai les tableaux suivants (simplifiés):

. CLÉ PRIMAIRE 
 Fk_quotation_receipt_id bigint RÉFÉRENCES citations (reçu_id) 
); 

Mon problème se lit maintenant comme suit:

J'ai des commandes qui se rapportent à des devis précédents (ce qui est bien car je peux joindre un tel ordre au devis référencé en utilisant le champ FK), mais j'ai également des commandes passées à partir de zéro sans a citation correspondante. Le champ FK serait alors NULL, si la base de données me le permettait, bien sûr. Malheureusement, j'obtiens une erreur lorsque j'essaie de définir fk_quotation_receipt_id sur NULL dans une instruction INSERT en raison d'une contrainte de clé étrangère violée.

Lors de la conception de ces tables, j'utilisais toujours PgSQL 8.2, qui autorisait les valeurs NULL. Maintenant, j'ai 9.1.6, ce qui ne permet pas cela.

Ce que je souhaite, c'est un facultatif (ou nullable) contrainte de clé étrangère order_confirmations (fk_quotation_receipt_id) → citations (reçu_id). Je ne trouve aucun indice dans les documents officiels de PgSQL, et les problèmes similaires publiés par d'autres utilisateurs sont déjà assez anciens.

Merci pour tout conseil utile.

29
Neppomuk

Fonctionne pour moi en 9.3 après avoir corrigé une virgule manquante. Je suis sûr que cela fonctionnera aussi en 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