2015-01-14 20 views
8

Ho un sacco di script SQL che creano tabelle nel database. Ogni tabella si trova in un file separato in modo che la loro modifica sia molto più semplice.Come eseguire lo script sql di Postgres da un altro script?

Volevo preparare un singolo script SQL che crei lo schema completo, crei tabelle, inserisca dati di test e generi sequenze per le tabelle.

Sono stato in grado di fare questa cosa per il database di Oracle ma ho problemi con postgres. Il fatto è che non so come eseguire la tabella creando script da un altro script.

in Oracle lo faccio utilizzando la seguente sintassi:

@@'path of the script related to the path of the currently running sql file' 

e tutto funziona come un fascino.

In postgres che stavo cercando di cercare qualcosa di simile e ho trovato questo:

\ir 'relative path to the file' 

Purtroppo quando eseguo il mio script principale ricevo il seguente messaggio:

No such file or directory. 

La chiamata esempio è qui:

\ir './tables/map_user_groups.sql' 

Uso Postgres 9.3. Ho provato a eseguire lo script utilizzando psql:

psql -U postgres -h localhost -d postgres < "path to my main sql file" 

Il file viene eseguito senza la chiamata di altri script.

Qualcuno sa come risolvere il problema?

Se qualcosa nella questione non è chiara - fammelo sapere :)

+0

In quale sistema operativo si sta tentando di realizzare questo? – rchang

+4

'psql -U postgres -h localhost -d postgres <" percorso al mio file sql principale "': dal punto di vista di psql il file main_sql è solo stdin. stdin non ha "nomefile"; usa '-f nomefile' per inviare un file ** con ** un nome. – wildplasser

+1

Grazie @wildplasser, era così :) rchang lo faccio su Windows 7 Professional –

risposta

1

Sulla base della risposta It is possible to reference another SQL file from SQL script, su PostgreSQL, è possibile includere i file di un altro SQL solo utilizzando la sintassi \i. Ho appena testato e sta lavorando bene su PostgreSQL 9.6:

\i other_script.sql 
SELECT * FROM table_1; 
SELECT * FROM table_2; 

dal commento @wildplasser:

psql -U postgres -h localhost -d postgres < "path to my main sql file" 

Dal punto di vista psql il file main_sql è solo stdin, e stdin non ha "il nome del file". Utilizzare -f filename per inviare un file con un nome:

psql -U postgres -h localhost -d postgres -f filename.sql 

Come eseguire Postgres script SQL da un altro script?

Sembra la stessa domanda: How to import external sql scripts from a sql script in PostgreSQL?

Problemi correlati