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