Importa dump SQL nel database PostgreSQL


451

Stiamo cambiando host e quello precedente ha fornito un dump SQL del database PostgreSQL del nostro sito.

Ora sto provando a configurarlo su un server WAMP locale per testarlo.

L'unico problema è che non ho idea di come importare questo database in PostgreSQL 9 che ho impostato.

Ho provato pgAdmin III ma non riesco a trovare una funzione di "importazione". Quindi ho appena aperto l'editor SQL e incollato il contenuto del dump lì ed eseguito, crea le tabelle ma continua a darmi errori quando tenta di inserire i dati in esso.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

Ho anche provato a farlo con il prompt dei comandi ma non riesco a trovare il comando di cui ho bisogno.

Se lo faccio

psql mydatabase < C:/database/db-backup.sql;

Ottengo l'errore

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Qual è il modo migliore per importare il database?


Ho avuto un errore simile al primo: ERROR: syntax error at or near "t". Si è scoperto che avevo importato solo uno schema parziale e quindi CREATE TABLEun'affermazione precedente nella sceneggiatura non era riuscita. Guarda l'output completo dell'importazione per trovarlo.
owensmartin,

Risposte:


732
psql databasename < data_base_dump

Questo è il comando che stai cercando.

Attenzione: databasenamedeve essere creato prima dell'importazione. Dai un'occhiata al capitolo 23 di Documenti PostgreSQL. Backup e ripristino .


1
Ho provato quel psql mydatabase <C: \ database \ db-backup.sql ma ricevo l'errore Comando \ database non valido. Ho anche provato con "" attorno ad esso.
Dazz,

23
@Dazz Devi eseguire questo comando dal prompt dei comandi (Start -> Esegui -> cmd), non dal prompt di postgres.
Jacob,

2
se lo eseguo da cmd ottengo 'L'operatore' <'è riservato per uso futuro.'
Dazz,

3
@Dazz: potresti usare anche l' -finterruttore (o --file)
Grzegorz Szpetkowski il

47
psql --username = postgres nome database <data_base_dump.sql
Maxence

356

Ecco il comando che stai cercando.

psql -h hostname -d databasename -U username -f file.sql

29
Buono, ma è meglio aggiungere anche il parametro "-L logfile.log" per registrare l'output su file.
zerologiko,

2
ottenere questo "L'input è un dump in formato personalizzato PostgreSQL. Utilizzare il client della riga di comando pg_restore per ripristinare questo dump in un database."
Wajdan Ali,

3
Puoi anche:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo,

114

Credo che tu voglia eseguire in psql:

\i C:/database/db-backup.sql

Ho dovuto usare questo perché l'eshell di Emacs non supporta il reindirizzamento dell'input. Grazie.
duma,

3
Assicurati di passare prima al database con \ c <database_name>
hkong


49

Non sono sicuro che funzioni per la situazione del PO, ma ho scoperto che eseguire il seguente comando nella console interattiva era la soluzione più flessibile per me:

\i 'path/to/file.sql'

Assicurati solo di essere già connesso al database corretto. Questo comando esegue tutti i comandi SQL nel file specificato.


1
Questa soluzione ha funzionato per me mentre la soluzione più votata ha prodotto l'errore "stdin is not a tty".
김민준

Proprio quello che stavo cercando - un modo per eseguire lo script dalla psqlriga di comando. Grazie!
Vatsug,

Volevo solo ringraziarti per questo. Dovrebbe essere incluso nella risposta giusta.
PKHunter,

questo è corretto, non usare le barre rovesciate nel percorso di Windows!
Erdinc Ay,

anche per Windows, hai bisogno di barre doppie
CMAS

44

Funziona abbastanza bene, nella riga di comando, sono richiesti tutti gli argomenti, -W è per la password

psql -h localhost -U user -W -d database_name -f path/to/file.sql

22

Solo per divertimenti, se il tuo dump è compresso puoi fare qualcosa del genere

gunzip -c filename.gz | psql dbname

Come menzionato Jacob, i documenti PostgreSQL descrivono tutto questo abbastanza bene.


7

Io uso:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Spero che questo possa aiutare qualcuno.


4

Puoi farlo in pgadmin3. Elimina gli schemi che contiene il tuo dump. Quindi fare clic con il tasto destro sul database e selezionare Ripristina. Quindi è possibile cercare il file di dump.


2
Ma il pulsante 'ripristina' non è possibile fare clic anche dopo aver selezionato il file .sql. Questo software sembra desiderare qualche altro tipo di file, uno con il formato * .backup. Facendo clic su "help" su quella casella di importazione si fa riferimento a pg_restore - "... un'utilità per ripristinare un database PostgreSQL da un archivio creato da pg_dump in uno dei formati non di testo semplice." Il file sql a cui l'OP fa riferimento è un formato di testo semplice.
JosephK,

4

Ho notato che molti esempi sono troppo complicati per localhost in cui in molti casi esistono solo utenti postgres senza password:

psql -d db_name -f dump.sql

4

assicurarsi che sia stato creato il database in cui si desidera importare, quindi è possibile importare il dump con

sudo -u postgres -i psql testdatabase < db-structure.sql

Se si desidera sovrascrivere l'intero database, eliminare innanzitutto il database

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

e poi ricrearlo con

sudo -u postgres -i psql -c "create database testdatabase;"

2

Ho provato molte soluzioni diverse per ripristinare il mio backup postgres. Mi sono imbattuto in permesso negato problemi su MacOS, nessuna soluzione sembrava funzionare.

Ecco come l'ho fatto funzionare:

Postgres viene fornito con Pgadmin4. Se usi macOS puoi premere CMD+ SPACEe digitare pgadmin4per eseguirlo. Questo aprirà una scheda del browser in Chrome.

Se si verificano errori durante il funzionamento di pgadmin4, provare killall pgAdmin4nel terminale, quindi riprovare.


I passaggi per ottenere pgadmin4 + backup / restore

1. Creare il backup

Per fare ciò, fai clic con il pulsante destro del mouse sul database -> "backup"

inserisci qui la descrizione dell'immagine

2. Assegna un nome al file.

Come test12345. Fai clic su backup. Questo crea un dump di file binario, non è in un .sqlformato

inserisci qui la descrizione dell'immagine

3. Guarda dove è stato scaricato

Dovrebbe esserci un popup nella parte inferiore destra dello schermo. Fai clic sulla pagina "Ulteriori dettagli" per vedere dove è stato scaricato il backup

inserisci qui la descrizione dell'immagine

4. Trova la posizione del file scaricato

In questo caso, lo è /users/vincenttang

inserisci qui la descrizione dell'immagine

5. Ripristinare il backup da pgadmin

Supponendo di aver eseguito correttamente i passaggi da 1 a 4, avrai un file binario di ripristino. Potrebbe venire un momento in cui il collega desidera utilizzare il file di ripristino sul proprio computer locale. Ho detto che la persona va su pgadmin e ripristina

Fatelo facendo clic con il tasto destro sul database -> "ripristina"

inserisci qui la descrizione dell'immagine

6. Seleziona il file finder

Assicurati di selezionare manualmente il percorso del file, NON trascinare e rilasciare un file sui campi del caricatore in pgadmin. Perché ti imbatterai in permessi di errore. Trova invece il file che hai appena creato:

inserisci qui la descrizione dell'immagine

7. Trova detto file

Potrebbe essere necessario modificare il filtro in basso a "Tutti i file". Trova il file in seguito, dal passaggio 4. Ora premi il pulsante "Seleziona" in basso per confermare

inserisci qui la descrizione dell'immagine

8. Ripristina detto file

Vedrai di nuovo questa pagina, con la posizione del file selezionata. Vai avanti e ripristinalo

inserisci qui la descrizione dell'immagine

9. Successo

Se tutto va bene, in basso a destra dovrebbe apparire un indicatore che mostra un ripristino riuscito. Puoi passare alle tue tabelle per vedere se i dati sono stati ripristinati correttamente su ciascuna tabella.

10. Se non ha avuto successo:

Se il passaggio 9 fallisce, prova a eliminare il tuo vecchio schema pubblico sul tuo database. Vai a "Strumento di query"

inserisci qui la descrizione dell'immagine

Eseguire questo blocco di codice:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

inserisci qui la descrizione dell'immagine

Ora prova di nuovo i passaggi da 5 a 9, dovrebbe funzionare

Sommario

È così che ho dovuto eseguire il backup / ripristino del mio backup su Postgres, quando avevo problemi di autorizzazione e non potevo accedere come superutente. Oppure imposta le credenziali per la lettura / scrittura usando chmodper le cartelle. Questo flusso di lavoro funziona per un dump di file binario predefinito "Personalizzato" da pgadmin. Presumo .sqlsia allo stesso modo, ma non l'ho ancora testato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.