Encontrando furos em sequências no PostgreSQL

Dica rápida: você precisa encontrar, num tabela com o tipo serial, quais os que estão faltando na sequência (o que poderia indicar alguma transação que sofreu rollback ou alguma tupla que foi deletada). No PostgreSQL, cabe tudo numa query só:

SELECT * FROM generate_series(1,(SELECT max(id_campo_serial) FROM tabela)) AS i WHERE i NOT IN
        (SELECT id_campo_serial FROM tabela)
 

Outra forma possível, agora chamando a sequência pelo nome:

SELECT id
FROM generate_series(1, (SELECT last_value FROM id_seq)) AS s(id)
EXCEPT
SELECT id_campo_serial FROM tabela
 

É isso!

This entry was posted in PostgreSQL and tagged , , . Bookmark the permalink.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>