domingo, 27 de dezembro de 2009

Postgres - Ultima Chave Primária Inserida (Auto-incremento)

Quando se utiliza um auto-incremento em em um banco de dados sempre existe a necessidade se fazer a inserção em uma tabela e utilizar a ultima chave inserida para fazer o insert em uma segunda tabela.

Nesse caso, um SELECT MAX não é uma opção porque não oferece nenhuma garantia quanto à concorrência. O que você consulta pode não ser o que você acabou de inserir.
A solução para isso no Postgres é bem simples, mas a aborgagem é outra. Você não vai inserir e depois buscar a chave para inserir em outra tabela.

No Postgres, um campo de auto-incremento, na verdade, possui uma associação a uma sequência e o que você precisa fazer é consultar essa sequência para saber qual o próximo número a ser usado. Ao fazer isso, a própria sequência se encarregará de fazer o incremento, sem que você corra o risco de outra linha de execução consultar o mesmo número que você acabou de receber. Esse é um processo atômico (indivisível), feito pelo próprio SGBD do Postgres.

Utilize o comando abaixo para consultar a próxima chave:

select nextval('NomeDaChave')

Pronto, você irá receber uma chave única, ninguém mais conseguirá utilizá-la. Dai em diante, basta você inserir esta mesma chave na tabela mãe e na filha.