Re: Help

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: Help
Дата
Msg-id CAKFQuwZc++9hy1PdxTdonZyi3AAGBQrECKd8yTA+xg0rvbKqZg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Help  (John R Pierce <pierce@hogranch.com>)
Список pgsql-bugs
On Thursday, March 17, 2016, John R Pierce <pierce@hogranch.com> wrote:

> On 3/17/2016 6:48 AM, Ritanjali M wrote:
>
>>
>> I am new to PostgreSQL ,i want to insert record into multiple table in a
>> single transaction and i need to get identity value from first table and
>> need to insert into  second table with same transaction,so please help me
>> out with example.
>>
>>
>
> this is not a bug, and shouldn't be sent to the pgsql_bugs reporting mail
> list.
>
> you probably want to subscribe to and post to the pgsql-general email list
> for these sorts of questions....
>
> but, you would do something like..
>
>     begin;
>     insert into firsttable .....  returning id;
>     insert into secondtable ....  values (....including 'id' value
> returned by previous query...);
>     commit;
>
> its up to your application program making these calls to accept the return
> value of the first insert and include it in the 2nd insert, the specifics
> of doing that are programming language and sql binding specific.
>
>
>
Or you can create a DO block and use pl/pgsql.  Or, I think, common table
expressions (CTE/WITH)

DO $$
DECLARE result1_id bigint;
BEGIN
Roughly what John wrote
END;
$$

With insert_one AS (
Insert returning id
), insert_two AS (
insert into tbl2 (fk1)
Select id from insert_one
Returning
)
Select * from insert2;

You can turn the DO block into a formal function too.

Or just do the passing in the client like John said.

The CTE method I've never used and has limitations - a function or DO is
the most efficient method - the choice depends on your specifics.

David J.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: "David G. Johnston"
Дата:
Сообщение: Re: BUG #14025: Unable to validate constraints
Следующее
От: Jim Nasby
Дата:
Сообщение: Re: BUG #13750: Autovacuum slows down with large numbers of tables. More workers makes it slower.