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