Как вкладывать `insert ... returning '? - PullRequest
0 голосов
/ 02 ноября 2018

Postgresql может возвращать автоматически увеличенные значения с помощью returning:

insert into table1 (id) values (null) returning id;

Я пытался вставить возвращенное значение в другую таблицу:

insert into table2 (id) values ((insert into table1 (id) values (null) returning id)) returning id;

Но это выдает синтаксическую ошибку перед into во вложенном insert.

Как использовать возвращаемое значение внутреннего insert в качестве значения для внешнего insert?

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете связать данные, модифицирующие CTE :

with new_t1 as (
  insert into table1 (id) values (default) 
  returning id
)
insert into table2 (id) 
select id 
from new_t1;

Обратите внимание, что insert into table1 (id) values (null) returning id вернет null, поскольку вы явно просите вставить NULL в этот столбец.

Чтобы убедиться, что значение сгенерировано, вы должны указать Postgres использовать значение по умолчанию для этого столбца, а не значение NULL.

...