Diogo Teixeira Rossato wrote:

> > Como criar um campo de auto-incremento no PG-SQL? Por exemplo:
> >
> > /? No primeiro registro o campo funcionario_id assume o valor de 1. No 
> > próximo registro adicionado ele tomará o valor de 2. Se eu excluir o 
> > registro nº. 2 ao invés dele criar o registro nº. 3 ele cria um novo 
> > registro nº. 2.?/
> >
> Para auto-incremento, use o tipo serial.
> Ele não vai voltar o número ao excluir o registro, então
> você terá que criar uma trigger no "on delete" para voltar 1
> na sequence quando o excluído for o último registro.
> 
Acho que o gatilho ON DELETE para voltar um valor na sequência não
funciona. E se você tiver uma transação concorrente?
Se você não quiser furar uma sequência, você terá que usar uma tabela
com um campo inteiro e utilizar o seguinte pseudo-código:

BEGIN;

LOCK TABLE x;

SELECT MAX(a) AS t FROM x;

INSERT INTO x VALUES(t + 1);

INSERT INTO sua_tabela (campo1, campo2) VALUES(t + 1, 'descricao');

COMMIT;


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a