PostgreSQL:如何在INSERT命令中访问序列类型列生成的新值?

o8x7eapl  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(1)|浏览(127)

我想在Insert命令中访问新创建的记录ID(PM)。
我有一张这样的table:

CREATE TABLE item_list."groups" (
    id serial4 NOT NULL,
    "name" varchar NOT NULL,
    hierarchical_id varchar NOT NULL,
    parent_id int4 NOT NULL
)

当我插入到表中时,由于序列类型,id的新值会自动生成。
但是,我想填充Hierarchy_id,这样它就是组Parents Hierarchy_id+新创建的组id**的串联。
例如:

  • 父层次id为:0-12
  • 我插入一个新的组,它的ID得到20。
  • 新组Hierarchy_id应为0-12-20。
    我可以在同一查询中执行此操作吗?如果是,为了访问新生成的id,INSERT命令应该是什么样子的?

父代hieararchical_id是已知的,不需要查询。

pdkcd3nj

pdkcd3nj1#

最好的解决方案可能是这样的BEFORE INSERT触发器:

CREATE FUNCTION ident_trig() RETURNS trigger
   LANGUAGE plpgsql AS
$$BEGIN
   NEW.hierarchical_id := concat(NEW.hierarchical_id, '-', NEW.id);
   RETURN NEW;
END;$$;

CREATE TRIGGER ident_trig BEFORE INSERT ON item_list."groups"
   FOR EACH ROW EXECUTE FUNCTION ident_trig();

然后插入父级的hierarchical_id,触发器将正确修改它。

相关问题