将PK序列列值用作另一个非空列的默认值

时间:2019-04-18 21:32:08

标签: postgresql default-value

我有一个表,表本身具有简单的层次化父子关系。我没有使用嵌套集,而是添加了root_id列,以便可以通过单个查询加载单个根的所有后代。

create table tree (
    id          serial                  primary key,
    root_id     int     not null        default id,  -- error
    parent_id   int,
    ...
);

我想将该列设为not null,但是新根目录的值将是根目录本身的主键值,该值在插入之前不可用。有什么方法可以将行的主键值用作root_id列的默认值?

1 个答案:

答案 0 :(得分:0)

在描述了表格以查看id列的默认值并猜测语法之后,我发现您可以将序列的当前值用作默认值。

root_id     int     not null        default currval('tree_id_seq'::regclass)