Как в plpgsql функции сделать insert, сохранить то что тон верннет в переменной, а потом сделать еще один инсерт на основе этой переменной?

create function install() returns boolean
AS $$
begin
  -- save to variable
  id = insert into pu.user (role)
  values ('admin')
  returning id;
  
  -- use id variable
  insert .... values(id);

  return true;
end;
$$ language plpgsql;

Ответы (2 шт):

Автор решения: user403405

Это можно сделать и на чистом postgres sql:

  with admin_user as (
    insert into users_table (role)
    values ('admin')
    returning id
  )

  insert into another_table (admin_id)
  values (admin_user.id);
→ Ссылка
Автор решения: Alexander Letnikow Inferik

Возможно, стоит добавить блок declare?


 create function install() returns boolean
AS $$
declare
    inserted_id integer;
begin
  -- save to variable
  inserted_id = insert into pu.user (role)
  values ('admin')
  returning id;
  
  -- use id variable
  insert .... values(inserted_id);

  return true;
end;
$$ language plpgsql;

→ Ссылка