Parece que fui mordido pelo primeiro bug descrito nas notas de lançamento do postgresql 9.3.4: http://www.postgresql.org/docs/devel/static/release-9-3-4.html
Agora tenho, por exemplo, chaves primárias duplicadas. Qual é a melhor abordagem para fazer um loop de nova verificação de todas as minhas restrições (pkeys, fkeys) -> corrigir problemas -> verificar novamente, para garantir que meus dados estejam corretos?
ATUALIZAR
Decidi seguir uma abordagem para corrigir o problema, excluindo todas as restrições e, em seguida, recriando-as usando o seguinte método http://blog.hagander.net/archives/131-Automatically-dropping-and-creating-constraints.html . No entanto, estou preso em uma mensagem de erro, tentando recriar uma pkey:
ERROR: failed to find parent tuple for heap-only tuple at (1192248,5) in table "fruits"
CONTEXT: SQL statement "ALTER TABLE "pm"."fruits" ADD CONSTRAINT "fruits_pkey" PRIMARY KEY (id)"
O que isso significa e como faço para corrigir isso (posso viver com a exclusão, se for uma opção)?
Outra pergunta: meus dados seriam realmente bons, se eu apenas me livrasse de todas as linhas duplicadas excluindo-as e, em seguida, fizesse um pg_dump e restaurasse o banco de dados desse despejo. Isso reconstruiria a estrutura de dados - certo?
Bem, se você precisar de uma maneira de verificar se todas as chaves estrangeiras em sua tabela são válidas, isso pode ajudar (apenas valida todas as chaves estrangeiras em seu esquema)
A solução proposta por Evan Carroll não estava funcionando para mim.
Eu tive que adaptá-lo para marcar antes de todas as restrições como não válidas.
Isso funcionará em todas as restrições com segurança. ,
Você pode salvar isso em um arquivo e fazer perguntas/respostas ou executá-lo de uma só vez se estiver usando
psql
com\gexec
.