Nesse post eu gostaria de explorar um recurso muito interessante que surgio na verão 8.3 do PostgreSQL é a clausula RETURNING, ela é muito util quando se deseja obter um valor que foi persistido em um INSERT e o campo é auto incrementado ou modificado por uma TRIGGER.
Vejamos um exemplo simples, vamos criar uma tabela com 2 campos sendo um deles gerado automaticamente.
CREATE TABLE entidade ( codigo bigserial NOT NULL, descricao character varying NOT NULL );
ALTER TABLE ONLY entidade ADD CONSTRAINT entidade_pkey PRIMARY KEY (codigo);
Agora executaremos o INSERT .
INSERT INTO entidade(descricao) VALUES ('Descrição') RETURNING codigo;
Se for o primeiro registro da tabela retornará um registro com o campo código e o valor será 1.
Pode ser especificado mais de um campo, separando por virgula.