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