Respuestas:
Esto se debe a que es la forma en que funciona pg_restore.
El manual de pg_restore dice lo siguiente:
-C, --create Crea la base de datos antes de restaurarla. Si también se especifica --clean, suelte y vuelva a crear la base de datos de destino antes de conectarse a ella.
Cuando se usa esta opción, la base de datos nombrada con -d se usa solo para emitir los comandos iniciales DROP DATABASE y CREATE DATABASE . Todos los datos se restauran en el nombre de la base de datos que aparece en el archivo .
La -d se restaurará en la base de datos dada si y solo si no se usa -C. Si se usa -C, la base de datos se usa como una "plataforma de lanzamiento", no como el 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"'
En resumen, desea cualquiera (limpiar existente): (tenga en cuenta que el nombre de la base de datos es postgres
)
pg_restore -c -d postgres db.dump
o (crear nuevo)
pg_restore -C -d postgres db.dump
o (crear nuevo explícitamente)
createdatabase the_database
pg_restore -d the_database db.dump
Vea lo que dijo SCO para más detalles.
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
puede parecer aterrador, pero no hace nada a la base de datos de postgres, solo lo usa para la conexión inicial.
Para ser un poco más explícito, esto es lo que hice que resolvió el problema para mí:
Cree una base de datos vacía con el nombre que desee: (en mi caso, el nombre de usuario era 'postgres')
psql -U [username]
Luego le pedirá su contraseña. En este punto, iniciará sesión como [nombre de usuario]. Escriba lo siguiente:
CREATE DATABASE [dbname];
Ahora salga de la sesión y regrese a su sesión regular de terminal.
Restaure la base de datos desde el archivo que tiene configurando el nombre de la base de datos de destino como el nombre de la base de datos que acaba de crear.
cat [your_file_path/filename] | psql -U [username] [dbname]
Donde [your_file_path / filename] es la ubicación del archivo db o archivo de texto que desea restaurar.
-F
opción de, debe usar pg_restore para restaurar la copia de seguridad, a menos que use una -F p
que produzca un archivo de texto sin formato con frases sql.
pg_restore
. La opción -C solo puede crear una base de datos cuyo nombre coincida con el nombre de la base de datos en el archivo de volcado. Para restaurar a una base de datos arbitraria, debe ejecutarCREATE DATABASE new_db;
en psql antes de ejecutarpg_restore --dbname=new_db
.