Re: shorter way to get new value of serial?
От | David Roussel |
---|---|
Тема | Re: shorter way to get new value of serial? |
Дата | |
Msg-id | AC265597-5C53-4349-BEE2-DFC5F429D407@diroussel.xsmail.com обсуждение исходный текст |
Ответ на | shorter way to get new value of serial? (Harald Armin Massa <haraldarminmassa@gmail.com>) |
Список | pgsql-general |
You can allocate you're numbers from a sequence... http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html Then you can peek at the sequence to see what was last allocated. Exactly how you do it depends on your circumstances. On 18 Nov 2005, at 13:26, Harald Armin Massa wrote: > I have a table: > > > CREATE TABLE rechner > ( > id_r int4 NOT NULL DEFAULT nextval('rechner_id_r_seq'::regclass), > name text, > CONSTRAINT rechner_pkey PRIMARY KEY (id_r) > ) > CREATE UNIQUE INDEX rechner_name > ON rechner > USING btree > (name); > > and want to have the existing or new id of 'newobjekt' > > > CREATE OR REPLACE FUNCTION getrechnerid( text) > RETURNS int4 AS > ' DECLARE > result int4; > BEGIN > select id_r from rechner where name=upper($1) into result; > > IF not FOUND THEN > select nextval(''swcheck_id_check_seq'') into result; > insert into rechner (id_r, name) values (result, upper($1)); > END IF; > return result; > END; > ' > LANGUAGE 'plpgsql' VOLATILE; > > ############# > > so on an empty table: > > select getrechnerid('LEBERWURST'); > -> 1 > > select getrechnerid('FISCH'); > -> 2 > > select getrechnerid('LEBERWURST'); > -> 1 > > everything is fine. BUT: I feel that this a SO USUAL request > (please, give me the new primary key of that just inserted beast), > that there may be a simpler way, and I am just to blind to see. > > Is there really one? > > Harald > > -- > GHUM Harald Massa > persuasion python postgresql > Harald Armin Massa > Reinsburgstraße 202b > 70197 Stuttgart > 0173/9409607
В списке pgsql-general по дате отправления: