Insert zaznamu do Postgresu a zjisteni PK

Rybarik, Michal mrybarik na tronet.sk
Úterý Červenec 29 14:10:28 CEST 2003


> uz asi pul roku v mezi casu se seznamuji s Postgresem(7.3) a 
> stale resim 
> jednu drobnost, kterou lze doufam resit nejak elegantneji:
> 
> CREATE TABLE sklad (
>    id SERIAL,
>    kategorie TEXT NOT NULL,
>    nazev TEXT NOT NULL,
>    nakup DATE NOT NULL,
>    PRIMARY KEY("id")
> ) WITH OIDS;
> 
> Vlozim zaznam:
> 
> INSERT INTO sklad (kategorie, nazev, nakup) values ('tmp', 
> 'tmp', now());
> 
> Zaznam se vlozi, ale ja bych potreboval ziskat id tohoto 
> vlozeneho zaznamu.
> Zatim to resim takto funkci:

uzavrite insert do transakcie a po inserte si viete zistit aktualnu 
hodnotu sekvencie. inak povedane, "id serial" znamena ze id bude typu
int4 a na neho bude naviazana sekvencia pravdepodobne sklad_id_seq
(ako sa presne vola zistite tusim cez \ds alebo \dS). cele vkladanie
potom bude vyzerat takto

begin;
INSERT INTO sklad (kategorie, nazev, nakup) values ('tmp', 'tmp', now());
select currval('sklad_id_seq') as last_id;
commit;

resp. moznoze ten insert a select treba spravit v opacnom poradi (nie som
si isty ci v sekvencii je posledne pouzite cislo alebo nasledujuce ktore
sa ma pouzit) a tiez si nie som isty cije to curval alebo currval, len si
pamatam ze jedno z nich pouziva oracle a jedno posgres. skuste, uvidite.

p


Další informace o konferenci Linux