Respostas:
Isso ocorre porque é assim que o pg_restore funciona.
O manual do pg_restore tem a seguinte redação :
-C, --create Crie o banco de dados antes de restaurá-lo. Se --clean também for especificado, descarte e recrie o banco de dados de destino antes de conectar-se a ele.
Quando essa opção é usada, o banco de dados nomeado com -d é usado apenas para emitir os comandos DROP DATABASE e CREATE DATABASE iniciais . Todos os dados são restaurados no nome do banco de dados que aparece no arquivo morto .
O -d será restaurado no banco de dados especificado se e somente se -C não for usado. Se -C for usado, o banco de dados será usado como uma "barra de ativação", não como o destino.
docker-compose -p dump_import -f docker/dump_import.yml run --rm be bash -c 'waitforit -host=postgres -port=5432 -timeout=30 && export PGPASSWORD=$DATABASE_PASSWORD && createdb --echo --port=$DATABASE_PORT -host=$DATABASE_HOST --username=$DATABASE_USER $DATABASE_NAME && pg_restore --format=c --dbname=$DATABASE_URL_WITHOUT_QUERY tmp/full.dump && echo "Import done"'
Em resumo, você deseja (limpar existente): (observe o nome do banco de dados postgres
)
pg_restore -c -d postgres db.dump
ou (criar novo)
pg_restore -C -d postgres db.dump
ou (criar novo explicitamente)
createdatabase the_database
pg_restore -d the_database db.dump
Veja o que a SCO disse para mais detalhes.
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
pode parecer assustador, mas não faz nada no banco de dados do postgres, apenas o usa para a conexão inicial.
Para ser um pouco mais explícito, foi o que fiz que resolveu o problema para mim:
Crie um banco de dados vazio com o nome que você deseja: (no meu caso, o nome de usuário era 'postgres')
psql -U [username]
Em seguida, será solicitada sua senha. Neste ponto, você estará logado como [nome de usuário]. Digite o seguinte:
CREATE DATABASE [dbname];
Agora saia da sessão e volte à sua sessão normal do terminal.
Restaure o banco de dados do arquivo em que você definiu o nome do banco de dados de destino como o nome do banco de dados que você acabou de criar.
cat [your_file_path/filename] | psql -U [username] [dbname]
Onde [your_file_path / filename] é o local do arquivo db ou do arquivo de texto que você deseja restaurar.
-F
opção de, é necessário usar o pg_restore para restaurar o backup, a menos que você use o -F p
que produz um arquivo de texto sem formatação com frases sql.
pg_restore
. A opção -C pode criar apenas um banco de dados cujo nome corresponde ao nome do banco de dados no arquivo de despejo. Para restaurar em um banco de dados arbitrário, você deve executar oCREATE DATABASE new_db;
psql antes de executarpg_restore --dbname=new_db
.