在我的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字段将为空.不幸的是,由于violated外键约束,在INSERT语句中try 将fk_quotation_receipt_id设置为NULL时,我得到了error.

在设计这些表时,我仍然使用PgSQL 8.2,它允许空值.现在我有了9.1.6,它不允许这样.

我想要的是optional (or nullable)外键约束order_confirmations(fk_quotation_receipt_id)→ quotations (receipt_id).我在官方PgSQL文档中找不到任何提示,其他用户发布的类似问题已经很老了.

谢谢你提供的有用提示.

推荐答案

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

Confirmation项将包括:

INSERT 0 1

Postgresql相关问答推荐

利用PostgreSQL查询中表的顺序来计算包含每次时间的时间范围

Postgres SQL执行加入

当条件的计算结果为假(或真)时停止执行查询

PostgreSQL无效语法

sqlalchemy在Flask 下运行时出现无法解释的错误

select语句的Jooq代码生成

安装age-installation时出错

Power BI + Postgres:只读用户

如何将 grafana 与 Google Cloud SQL 集成

如何 Select 任意行的相邻行(在 sql 或 postgresql 中)?

如何获得区间的绝对值

在 PostgreSQL docker 镜像中创建表

plpgsql:使用 2 个 OUT 参数调用函数

Postgres 表中列的顺序会影响性能吗?

manage.py 迁移时必须是关系 django_site 的所有者

在 PostgreSQL 中使用 Cursors进行分页

如何删除 Postgres 上的所有数据库?

如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

如何使用 PostgreSQL 在任何列中查找所有具有 NULL 值的行

在布尔字段上添加索引