Prima di tutto, non mescola psql
meta-comandi e SQL
comandi. Questi sono insiemi separati di comandi. Ci sono trucchi per combinarli (usando i meta-comandi psql \o
e \\
e piping stringhe su psql nella shell), ma questo diventa rapidamente confuso.
- Fai in modo che i tuoi file contengano solo comandi SQL.
- Non includere il
CREATE DATABASE
istruzione nei file SQL. Crea il db separatamente, ne hai multipli file che desideri eseguire nello stesso db modello.
Supponendo stai operando come utente del sistema operativo postgres
e usa il ruolo DB postgres
come (predefinito) Superuser Postgres, tutti i database si trovano nello stesso cluster di database sulla porta predefinita 5432 e il ruolo postgres
ha accesso senza password a causa di un IDENT
impostazione in pg_hba.conf
- una configurazione predefinita.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Ho basato il nuovo database dei modelli sul database dei modelli di sistema predefinito template0
. Nozioni di base nel manuale qui.
Le tue domande
Come (...) eseguire una serie di cmd pgsql da file
Prova:
psql mytemplate1 -f file
Esempio di file di script per batch di file in una directory:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
L'opzione di comando -f
rende psql
eseguire comandi SQL in un file.
Come creare un database basato su un modello esistente nella riga di comando
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
L'opzione di comando -c
rende psql
eseguire una singola stringa di comando SQL. Possono essere più comandi, terminati da ;
- sarà eseguito in uno transazione e viene restituito solo il risultato dell'ultimo comando.
Leggi informazioni sulle opzioni del comando psql nel manuale.
Se non fornisci un database a cui connetterti, psql
si collegherà al database di manutenzione predefinito denominato "postgres". Nella seconda risposta è irrilevante a quale database ci colleghiamo.