Insert v PostgreSQL 7.1.3
Radek Kanovsky
rk na dat.cz
Středa Únor 6 11:34:51 CET 2002
On Wed, Feb 06, 2002 at 11:25:22AM +0100, Karel Zak wrote:
> > Toto neni funkcni protoze mezi INSERT a SELECT muze byt INSERT od
> > dalsiho klienta, ktery sekvenci inkrementuje.
>
> Zkousel jste to? Jste si jist tim co vraci funkce currval()?
> Znova: nextval() vezme seq. a zamluvi si cislo pro *danou session*
> funkce currval() pak vzdy v dane session vraci hodnotu, kterou
> vratil posledni nextval(). A to i tehdy pokud jiny klient
> inkrementoval sequenci. Hodnota z nextval() je tedy v dane
> session cachovana az do pouziti dalsiho nextval() v dane
> session.
>
> Pro neverici tomase:
>
> Klient A:
>
> # SELECT nextval('xxx_id_seq');
> nextval
> ---------
> 24
> (1 row)
>
>
> Klient B:
>
> test=# SELECT nextval('xxx_id_seq');
> nextval
> ---------
> 25
> (1 row)
>
> Klient A:
>
> test=# SELECT currval('xxx_id_seq');
> currval
> ---------
> 24
> (1 row)
>
>
> > > BTW, je vhodne si taktez uvedomit, ze sequence jsou mimo transakce.
> >
> > Proto nefunguje vas posledni priklad uplne vzdy.
>
> Opravdu?
Byla to mystifikace. Zkousel jsem to spatne. Nejak mne nefungovala funkce
currval, resp. psal jsem curval, proto jsem delal
"select last_value from xxx_id_seq;", coz zrejme neni ekvivalentni.
Radek Kaňovský
Další informace o konferenci Test