Iandev Smarter Business - Logo Cor
Navegação no fórum
para criar postagens e tópicos.

Re-Criar Primary Key no Postgres

Alguns casos de recuperação de backup, as primary keys não subiram, então parti da ideia de levantar as primarys key em um cliente que esteja com banco ok, e exporta-las para o banco pauleado, e depois rodar o comando para adicionar novamente as primarys keys.

########
# Roda sql no banco Ok em algum cliente que esteja rodando.
########
Select
pg_class.relname as nometabela
,pg_constraint.conname as nomeconstrain
,pg_get_constraintdef(pg_constraint.oid) as pk
FROM pg_namespace JOIN pg_class ON pg_namespace.oid=pg_class.relnamespace
JOIN pg_constraint ON pg_class.oid=pg_constraint.conrelid
WHERE pg_namespace.nspname='public'
AND pg_class.relkind='r'
and pg_constraint.contype = 'p'
-- and pg_class.relname = 'saida'
ORDER BY pg_class.relname

!@#

#####
# Cria os comandos para rodar no cliente com problema.
SELECT 'ALTER TABLE '||nometabela||' add CONSTRAINT '||nomeconstrain||' '||pk||chr(59)
FROM heavenpk
Where
-- heavenpk.nometabela = 'saida'
not exists (
Select
pg_class.relname as nometabela
,pg_constraint.conname as nomeconstrain
,pg_get_constraintdef(pg_constraint.oid) as pk
FROM pg_namespace JOIN pg_class ON pg_namespace.oid=pg_class.relnamespace
JOIN pg_constraint ON pg_class.oid=pg_constraint.conrelid
WHERE pg_namespace.nspname='public'
AND pg_class.relkind='r'
and pg_constraint.contype = 'p'
and pg_class.relname = heavenpk.nometabela
)

#########
# No cliente com problema, descarrego as primarys keys que estão corretas no cliente ok.
Create table heavenpk (nometabela varchar(255) not null,nomeconstrain varchar(255) not null,pk varchar(255),primary key (nometabela,nomeconstrain));

#######
# Com o resultado do sql anterior, disparo os comandos no cliente com problema, e as primarys keys estarão novamente ativas.