创建 PostgreSQL 外键引用,默认值为 NULL

问题描述 投票:0回答:1

考虑下表定义:

CREATE TABLE containers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    parent_id SERIAL REFERENCES containers(id)
);

当我

INSERT INTO containers(name) VALUES('test_name')
时,我得到以下信息:

SELECT * FROM containers;
 id |   name    | parent_id
----+-----------+-----------
  1 | test_name |         1
(1 row)

看起来

parent_id
的默认值是同一行的
id
值。理想情况下,它会是
NULL
。我尝试通过以下方式实现这一目标:

CREATE TABLE containers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    parent_id SERIAL REFERENCES containers(id) DEFAULT NULL
);

但出现以下错误:

错误:为表“containers”的“parent_id”列指定了多个默认值

我可以做些什么来实现我想要的吗?

postgresql foreign-keys
1个回答
0
投票

这里的典型用例是插入一个新的子记录,并且先验了解子记录的父记录。 因此,假设您的初始记录仅被插入,我们可能期望插入如下内容:

INSERT INTO containers (name, parent_id) VALUES('sweet child of parent', 1);

在您的情况下,如果目的是插入根父级(定义为一条记录本身没有父级),那么您应该明确提及 NULL 作为

parent_id
:

INSERT INTO containers (name, parent_id) VALUES('root', NULL);
© www.soinside.com 2019 - 2024. All rights reserved.