Risposte:
Questo perché funziona così pg_restore.
Il manuale di pg_restore è il seguente :
-C, --create Crea il database prima di ripristinarlo. Se viene specificato anche --clean, rilasciare e ricreare il database di destinazione prima di connettersi ad esso.
Quando viene utilizzata questa opzione, il database denominato con -d viene utilizzato solo per emettere i comandi DROP DATABASE e CREATE DATABASE iniziali . Tutti i dati vengono ripristinati nel nome del database che appare nell'archivio .
-D verrà ripristinato nel database specificato se e solo se -C non viene utilizzato. Se si utilizza -C, il database viene utilizzato come "launchpad", non come destinazione.
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"'
In breve, vuoi uno (pulito esistente): (nota che il nome del database è postgres
)
pg_restore -c -d postgres db.dump
o (crea nuovo)
pg_restore -C -d postgres db.dump
oppure (crearne di esplicitamente nuove)
createdatabase the_database
pg_restore -d the_database db.dump
Guarda cosa ha detto SCO per maggiori dettagli.
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
può sembrare spaventoso, ma non fa nulla al database postgres, lo usa solo per la connessione iniziale.
Per essere un po 'più esplicito, questo è quello che ho fatto che ha risolto il problema per me:
Crea un database vuoto con il nome che desideri: (nel mio caso il nome utente era 'postgres')
psql -U [username]
Ti chiederà quindi la password. A questo punto sarai loggato come [nome utente]. Digita quanto segue:
CREATE DATABASE [dbname];
Ora esci dalla sessione e torna alla tua normale sessione terminale.
Ripristinare il database dal file in cui è stato impostato il nome del database di destinazione come nome del database appena creato.
cat [your_file_path/filename] | psql -U [username] [dbname]
Dove [percorso_file / nomefile] è la posizione del file db o del file di testo che si desidera ripristinare.
-F
opzione de , è necessario utilizzare pg_restore per ripristinare il backup, a meno che non si utilizzi -F p
che produce un file di testo semplice con frasi sql.
pg_restore
. L'opzione -C può solo creare un database il cui nome corrisponde al nome del database nel file di dump. Per ripristinare su un database arbitrario, è necessario eseguireCREATE DATABASE new_db;
in psql prima di eseguirepg_restore --dbname=new_db
.