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