如何在 postgres 的单个命令中插入然后更新从插入查询返回的 Id 作为返回 id?

How to insert and then update returned Id from insert query as returning id in a single command in postgres?

我有一个演示 table

CREATE TABLE items (
  id SERIAL primary key,
  user_id integer,
  name character varying,
  created timestamp with time zone default now()
);

我想要一个查询 运行 并首先插入数据,然后使用 returning id return 主键,然后使用 table 更新相同的 table return编辑编号。

INSERT INTO items (name) values ('pen') RETURNING id as idd 
update items set user_id=(select idd) where id=(select idd)

但上面的命令不起作用并抛出语法错误。 我们将不胜感激。

您可以直接在 INSERT 语句中执行此操作:

INSERT INTO items 
  (name, user_id) 
values 
  ('pen', currval(pg_get_serial_sequence('items','id')));

Online example

你也可以试试这个方法:

create temp table insert_item as 
with insert_item_cte as ( 
INSERT INTO items (name) 
 values ('pen') returning id 
) 
select id from insert_item_cte;

update items set user_id = items.id 
from insert_item ii 
where ii.id = items.id;

Online Demo