una tabla restricciones referencial llave integridad foranea eliminar crear con cascada agregar actualizar postgresql foreign-keys

postgresql - tabla - llave foranea pgadmin



PostgreSQL: valor NULL en columna de clave externa (1)

Trabaja para mí en 9.3 después de corregir una coma faltante. Estoy seguro de que funcionará también 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

En mi base de datos PostgreSQL tengo las siguientes tablas (simplificadas):

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

Mi problema ahora dice lo siguiente:

Tengo pedidos que se relacionan con citas anteriores (lo cual está bien porque puedo adjuntar una orden a la oferta a la que se hace referencia mediante el campo FK), pero también tengo pedidos realizados desde cero sin una oferta coincidente. El campo FK sería NULL, si la base de datos me lo permite, por supuesto. Desafortunadamente, recibo un error al intentar establecer fk_quotation_receipt_id en NULL en una instrucción INSERT debido a una restricción de clave foránea violada .

Al diseñar estas tablas todavía estaba usando PgSQL 8.2, lo que permitía valores NULL. Ahora tengo 9.1.6, que no permite esto.

Lo que deseo es una restricción de clave foránea opcional (o nullable) order_confirmations (fk_quotation_receipt_id) → quotations (recibo_id). No puedo encontrar ninguna pista en los documentos oficiales de PgSQL, y problemas similares publicados por otros usuarios ya son bastante antiguos.

Gracias por cualquier consejo útil.