Sto usando pg_dump / pg_restore per eseguire il backup e ripristinare un database PostgreSQL, ma sto ricevendo alcuni messaggi di errore (e uno stato di uscita diverso da zero) da pg_restore. Ho provato un caso di base super semplice (descritto di seguito) ma ho ancora questi errori:
pg_restore: [archiviatore (db)] Errore durante l'elaborazione del sommario: pg_restore: [archiver (db)] Errore dalla voce TOC 5; 2615 2200 postgres pubblici SCHEMA pg_restore: [archiver (db)] non ha potuto eseguire la query: ERRORE: lo schema "pubblico" esiste già Il comando era: CREATE SCHEMA public;
I passaggi per riprodurre:
- Installa una nuova distribuzione Ubuntu 14.04 alla vaniglia (sto usando Vagrant con questo box Vagrant ).
- Installa PostgreSQL 9.3, configura per consentire le connessioni locali come utente PostgreSQL "postgres" da qualsiasi utente Linux.
Creare un database di prova. Sto solo facendo:
vagrant @ vagrant-ubuntu-trusty-64: ~ $ psql --username = postgres postgres psql (9.3.5) Digita "aiuto" per aiuto. postgres = # crea database mydb; CREA DATABASE postgres = # \ q vagrant @ vagrant-ubuntu-trusty-64: ~ $ psql --username = postgres mydb psql (9.3.5) Digita "aiuto" per aiuto. mydb = # crea i dati della tabella (voce bigint); CREA TABELLA mydb = # inserisci nei valori dei dati (1); INSERISCI 0 1 mydb = # inserisci nei valori dei dati (2); INSERISCI 0 1 mydb = # inserisci nei valori dei dati (3); INSERISCI 0 1 mydb = # \ q
Creare un backup del database in questo modo:
PGPASSWORD = "postgres" pg_dump --dbname = mydb --username = postgres --format = custom> pg_backup.dump
Elimina alcune righe dalla tabella dei dati in mydb in modo da poter stabilire se i dati sono stati ripristinati correttamente.
Ripristina il database con:
PGPASSWORD = "postgres" pg_restore --clean --create --dbname = postgres --username = postgres pg_backup.dump
I dati vengono ripristinati, ma il comando pg_restore al passaggio 6 esce con stato 1
e mostra il seguente output:
pg_restore: [archiviatore (db)] Errore durante l'elaborazione del sommario: pg_restore: [archiver (db)] Errore dalla voce TOC 5; 2615 2200 postgres pubblici SCHEMA pg_restore: [archiver (db)] non ha potuto eseguire la query: ERRORE: lo schema "pubblico" esiste già Il comando era: CREATE SCHEMA public; ATTENZIONE: errori ignorati al ripristino: 1
Non posso semplicemente ignorarlo perché sto eseguendo questo comando a livello di codice e devo utilizzare lo stato di uscita per determinare se il ripristino non è riuscito o meno. Inizialmente, mi chiedevo se questo problema fosse dovuto al fatto di aver reso pubblico il mio database (lo schema predefinito). Ho pensato che il pubblico sarebbe stato creato come risultato --create
dell'opzione da pg_restore prima che i dati fossero ripristinati (il che potrebbe plausibilmente tentare di creare anche quello schema dal momento che è dove si trova la mia tabella), ma quando ho provato i passaggi precedenti con la mia tabella in uno schema diverso, i risultati erano gli stessi e i messaggi di errore erano identici.
Sto facendo qualcosa di sbagliato? Perché visualizzo questo errore?
--create
senzaclean
risolvere il problema.