Come importare file * .sql esistenti in PostgreSQL 8.4?


105

Sto usando PostgreSQL 8.4 e ho alcuni file * .sql da importare in un database. Come posso farlo?

Risposte:


142

Dalla riga di comando:

psql -f 1.sql
psql -f 2.sql

Dal psqlprompt:

\i 1.sql
\i 2.sql

Si noti che potrebbe essere necessario importare i file in un ordine specifico (ad esempio: definizione dei dati prima della manipolazione dei dati). Se hai una bashshell (GNU / Linux, Mac OS X, Cygwin) e i file possono essere importati in ordine alfabetico , puoi usare questo comando:

for f in *.sql ; do psql -f $f ; done

Ecco la documentazione psqldell'applicazione (grazie, Frank): http://www.postgresql.org/docs/current/static/app-psql.html


@moon Forse non hai i diritti di accesso ai file SQL? Che sistema operativo utilizzi?
Bolo

@moon È la password associata al tuo utente PostgreSQL (la coppia user-pass è memorizzata in PostgreSQL).
Bolo

8
@moon ti suggerisco di dividere il tuo problema in tre fasi: 1) assicurati di poter psqlcorrere. 2) assicurarsi che il proprio utente dispone dei privilegi di scrittura necessari, come ad esempio: CREATE, INSERT, UPDATE, ecc 3) importare i file SQL. Per quanto ho capito, sei allo stadio 1 ora.
Bolo

@Bolo: inseriresti le tre fasi nella risposta?
AH

@Bolo, come hai detto sono ora in terza fase. ma come posso importare il file .sql dalla mia macchina locale. Ho provato \ i [percorso completo con estensione] ma ricevo il messaggio di errore .sql nessun file o directory di questo tipo. Potresti fare un esempio.

75

nella riga di comando, raggiungi prima la directory in cui è presente psql, quindi scrivi comandi come questo:

psql [database name] [username]

e quindi premere invio psql chiede la password fornire la password dell'utente:

allora scrivi

> \i [full path and file name with extension]

quindi premere invio inserimento fatto.


Lo uso anche io. E funziona. Ma cambio le istruzioni SQL fornite. In precedenza, il * .sql esistente non utilizzava alcun carattere; come la fine di una linea. E devo anche rimuovere il GO. Pensi che lo script sql non sia uno script psql?
swdev

Ho provato a utilizzare \ i [percorso completo con estensione] ma ricevo il messaggio di errore .sql nessun file o directory di questo tipo. Potresti caricare un esempio. Grazie.

Se \ i dice nessun file di questo tipo, non ha trovato un file in quella posizione. È meglio fornire l'URL assoluto. Per me su Windows, questa riga di comando ha funzionato: \ i /tmp/robert/test.sql ovviamente devi avere comandi SQL validi in quel file.
Shevy

36

Bene, il modo più breve che conosco è il seguente:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

database_name: il database in cui inserire i dati del file.

file_path: percorso assoluto del file attraverso il quale si desidera eseguire l'importazione.

nome_host: il nome dell'host. Per scopi di sviluppo, è principalmente localhost.

Dopo aver immesso questo comando nella console, ti verrà chiesto di inserire la tua password.


25

Fai attenzione con "/" e "\". Anche su Windows il comando dovrebbe essere nella forma:

\i c:/1.sql

1

È sempre preferibile utilizzare un file del servizio di connessione (ricerca / google 'file del servizio di connessione psql')

Quindi semplicemente:

psql service={yourservicename} < {myfile.sql}

Dove si yourservicenametrova il nome di una sezione dal file di servizio.

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.