Re: INSERT question

Поиск
Список
Период
Сортировка
От Jason Earl
Тема Re: INSERT question
Дата
Msg-id 87y9l7u3k5.fsf@npa01zz001.simplot.com
обсуждение исходный текст
Ответ на Re: INSERT question  (Roland Roberts <roland@astrofoto.org>)
Ответы Re: INSERT question  ("Ross J. Reedstrom" <reedstrm@rice.edu>)
Список pgsql-sql
Yes that is entirely correct.  As you pointed out my example is *very*
dangerous if not wrapped in a transaction.  My query clearly should
have looked like this:

BEGIN;
INSERT INTO parent_table (data) values ('some data');
INSERT INTO child_table (parent, more_data)        (currval('parent_table_p_key_seq'),         'more data');
COMMIT;

Thanks for pointing that out.

Roland Roberts <roland@astrofoto.org> writes:

> >>>>> "Jason" == Jason Earl <jason.earl@simplot.com> writes:
> 
>     Jason> Even better, however, is to use the functions nextval() and
>     Jason> currval() like so:
> 
>     Jason> INSERT INTO parent_table (data) values ('some data');
>     Jason> INSERT INTO child_table (parent, more_data) 
>     Jason>         (currval('parent_table_p_key_seq'), 
>     Jason>          'more data');
> 
> The above is probably the best for a pure-SQL way with the caveat
> that it should be wrapped in a transaction or currval() may not be
> what you expect; i.e., another client may add a row and you get a
> value different from what you inserted.
> 
> roland
> -- 
>                PGP Key ID: 66 BC 3B CD
> Roland B. Roberts, PhD                             RL Enterprises
> roland@rlenter.com                     76-15 113th Street, Apt 3B
> roland@astrofoto.org                       Forest Hills, NY 11375
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)


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

Предыдущее
От: "Andrew G. Hammond"
Дата:
Сообщение: Re: INSERT question
Следующее
От: "Ross J. Reedstrom"
Дата:
Сообщение: Re: INSERT question