Re: Update more than one table

Поиск
Список
Период
Сортировка
От David Pratt
Тема Re: Update more than one table
Дата
Msg-id 33AF286A-F16D-11D9-AD67-000A27B3B070@eastlink.ca
обсуждение исходный текст
Ответ на Re: Update more than one table  (Roman Neuhauser <neuhauser@sigpipe.cz>)
Ответы Re: Update more than one table  (Bruno Wolff III <bruno@wolff.to>)
Список pgsql-general
Hi Roman.  Many thanks for your reply.  This is interesting and will I
give this a try and let you know how it works out. With this you are
right, application logic and transaction don't have to be separate
which would be nice for this.  I was thinking the only way to solve was
a function that performed an update and returned the nextval at the
same time so that I could use that value to perform the update on next
table,etc.

Regards,
David

On Sunday, July 10, 2005, at 02:32 PM, Roman Neuhauser wrote:

> # fairwinds@eastlink.ca / 2005-07-09 22:55:26 -0300:
>> Hi. I have a form that collects information from the user but then I
>> need to update three separate tables from what the user has submitted.
>> I could do this with application logic but I would feel it would be
>> best handled in Postgres as a transaction.
>
>     Those two don't conflict.
>
>> I need to do things in this order to satisfy the foreign key
>> constraints:
>>
>> 1.   Insert part of the data into 2 records of the first table (I need
>> to return theses ids so available for the next insert).
>>
>> 2.   Insert part of the data into a record in a second table.  The
>> id's
>> created in 1. need to be part of this record (cannot be null values)
>> and have also have referential integrity with the first table
>>
>> 3.   Insert the last part of the data into a record in a third table.
>> The id created in 2 needs to be part of this record). This has
>> referential integrity with the second table.
>
>     metacode:
>
>     BEGIN;
>     INSERT INTO first_table ...;
>     SELECT currval(first_table);
>     INSERT INTO first_table ...;
>     SELECT currval(first_table);
>     INSERT INTO second_table ...;
>     INSERT INTO third_table (... currval(second_table));
>     COMMIT;
>
>     You can do this with any CLI, like libpq, the Perl DBI, PHP/PEAR
>     pgsql_* functions or DB...
>
> --
> How many Vietnam vets does it take to screw in a light bulb?
> You don't know, man.  You don't KNOW.
> Cause you weren't THERE.             http://bash.org/?255991
>

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

Предыдущее
От: Roman Neuhauser
Дата:
Сообщение: Re: Update more than one table
Следующее
От: Matthew Terenzio
Дата:
Сообщение: Re: Wikipedia hackers wanted