PostgreSQL: значение NULL в столбце внешнего ключа

В моей базе данных PostgreSQL у меня есть следующие таблицы (упрощенные):

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

Моя проблема теперь выглядит следующим образом:

У меня есть заказы, которые относятся к предыдущим предложениям (что хорошо, потому что я могу приложить такой порядок к цитате, на которую ссылается использование поля FK), но у меня также есть упорядоченные заказы без подходящая цитата. Поле FK тогда было бы NULL, если бы база данных позволяла мне, конечно. К сожалению, я получаю ошибку при попытке установить fk_quotation_receipt_id в NULL в инструкции INSERT из-за ограничения внешнего ключа.

При разработке этих таблиц я все еще использовал PgSQL 8.2, что позволило использовать значения NULL. Теперь у меня 9.1.6, что не позволяет этого.

Я бы хотел, чтобы необязательный (или нулевой) ограничение внешнего ключа order_confirmations (fk_quotation_receipt_id) → цитаты (квитанция_ид). Я не могу найти никаких намеков в официальных документах PgSQL, и подобные проблемы, выпущенные пользователями, уже довольно стары.

Спасибо за полезные подсказки.

Ответы

Ответ 1

Работает для меня в 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