O id é gerado pelo banco se o tipo da coluna for serial ou bigserial como você colocou no título desta thread.
Duas maneiras de retornar o id. A que eu acho mais simples é usar a cláusula RETURNING do INSERT:
CODE
insert into tabela (x, y) values ('abc', 2) returning id
A outra maneira:
CODE
select curval(tabela_id_seq) as id
Nesta última forma o comando deve ser dado dentro da mesma sessão em que foi feito o último insert.