Как вставить, а затем обновить возвращенный идентификатор из запроса на вставку как возвращающий идентификатор в одной команде в postgres? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть демонстрационная таблица

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

И я хочу, чтобы один запрос выполнялся и сначала вставлял данные, затем возвращал первичный ключ, используя возвращаемый идентификатор, и затем обновлял ту же таблицу с возвращенным идентификатором.

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

но приведенная выше команда не работает и выдает синтаксическую ошибку. Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вы можете сделать это прямо в инструкции INSERT:

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

Онлайн пример

0 голосов
/ 21 февраля 2020

Вы также можете попробовать этот способ:

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;

Демо-версия

...