考虑下表定义:
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”列指定了多个默认值
我可以做些什么来实现我想要的吗?
这里的典型用例是插入一个新的子记录,并且先验了解子记录的父记录。 因此,假设您的初始记录仅被插入,我们可能期望插入如下内容:
INSERT INTO containers (name, parent_id) VALUES('sweet child of parent', 1);
在您的情况下,如果目的是插入根父级(定义为一条记录本身没有父级),那么您应该明确提及 NULL 作为
parent_id
:
INSERT INTO containers (name, parent_id) VALUES('root', NULL);