Então, a maneira como eu tenho feito backup do Postgres é com:
pg_dumpall -U eox-dev -h localhost --clean --file=/home/backups/postgres.sql
Quero ter certeza de que tenho um backup pronto para produção que tenha funções, relacionamentos, gatilhos, além de tabelas e dados.
Estou tentando restaurá-lo agora em um cluster Kubernetes em um banco de dados com um nome diferente prod_db
-> staging_db
, mas obter FATAL: database "prod_db" does not exist
. Estou tentando restaurá-lo para staging_db
que faça sentido. Uma das primeiras linhas do .sql
faz declare CREATE DATABASE prod_db
. Eu não sou sobre a edição do .sql
. Se eu tiver que fazer isso, estou fazendo algo errado.
Qual a forma correta de fazer esse backup?
Se você deseja restaurar bancos de dados individuais, provavelmente deve usar
pg_dump
, nãopg_dumpall
. E se você não pretende restaurar por cima de um banco de dados preenchido existente, não deve usar--clean
.Fazer backup de todo o cluster e migrar/clonar um banco de dados que está nele são tarefas diferentes, você provavelmente deseja que comandos diferentes as executem.
Mas você tem o dilema de que, se você especificar
--create
pg_dump, ele desejará restaurar em um banco de dados com o mesmo nome que despejou, e se você não especificar--create
, cabe a você criar um novo banco de dados com o nome que você deseja, mas também com a CODIFICAÇÃO e LOCAL corretos.Não acho que pg_dump ou pg_dumpall ou pg_restore possam alterar o nome do banco de dados a ser restaurado. No entanto, após restaurar o banco de dados (com o mesmo nome), você pode renomeá-lo com: