Eu tenho um servidor com dois bancos de dados. Cada banco de dados possui um nome de esquema diferente, apesar do fato de o DB2 ser um subconjunto do DB1 (o DB2 possui um subconjunto das tabelas no DB1).
Apesar de quaisquer alterações de código ou arquivos de ambiente que precisem ser alterados como resultado, há algum perigo em renomear o esquema de um banco de dados PostgreSQL? Em caso afirmativo, o que? Ou um simples ALTER SCHEMA ficará bem?
Depois
pg_dump
de um DB1 e uma restauração para DB2 (compsql -f
, provavelmente),ALTER SCHEMA
cuidará de todas as reverências internas. Obviamente, qualquer código armazenado fora do banco de dados deve ser atualizado - você já mencionou isso.O que pode ser menos óbvio: os corpos das funções devem ser atualizados manualmente, caso haja alguma referência ao nome do esquema. Só pode incluir funções que você mesmo escreveu.
Há também coisas menos comuns, como referências externas via
dblink
, incluindo auto-referências, que precisariam ser adaptadas. Você saberá sobre isso se estiver usando.Fora isso,
search_path
eles devem corresponder às suas respectivas configurações nos dois bancos de dados. Isso diz respeito a configurações gerais empostgresql.conf
, mas também configurações porDATABASE
ou porROLE
e possivelmente opções fornecidas com a conexão de seus aplicativos.Então você deve estar pronto para ir.
OU , e é isso que eu faria, você hackeia o dump . Depois de despejar do DB1, substitua todas as ocorrências do nome do esquema antigo por um editor de sua escolha. Em seguida, execute o script SQL editado
psql -f
para restaurar no DB2. Tudo feito.Obviamente, se o nome não for exclusivo em todo o dump, você terá que ter cuidado para substituir apenas as strings relevantes.
Se sua configuração for grande e o nome do esquema não for muito seletivo , talvez você queira restaurar para o DB2 como está,
ALTER SCHEMA
epg_dump
excluir do DB2 novamente e fazer o restante em seu editor antes de restaurar definitivamente.