Zunächst einmal nicht mix psql
Meta-Befehle und SQL
Befehle. Dies sind separate Befehlssätze. Es gibt Tricks, um diese zu kombinieren (mit den psql-Metabefehlen \o
und \\
und Strings an psql in der Shell übergeben), aber das wird schnell verwirrend.
- Stellen Sie sicher, dass Ihre Dateien nur SQL-Befehle enthalten.
- Schließen Sie
CREATE DATABASE
nicht ein Anweisung in den SQL-Dateien. Erstellen Sie die Datenbank separat, Sie haben mehrere Dateien, die Sie ausführen möchten, in derselben Vorlagendatenbank.
Angenommen Sie arbeiten als OS-Benutzer postgres
und verwenden Sie die DB-Rolle postgres
Als (Standard-) Postgres-Superuser befinden sich alle Datenbanken im selben DB-Cluster auf dem Standardport 5432 und der Rolle postgres
hat passwortlosen Zugriff durch einen IDENT
Einstellung in pg_hba.conf
- eine Standardeinstellung.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Ich habe die neue Vorlagendatenbank auf der Standard-Systemvorlagendatenbank template0
basiert . Grundlagen im Handbuch hier.
Ihre Fragen
Wie man (...) eine Reihe von pgsql cmds aus einer Datei ausführt
Versuchen Sie:
psql mytemplate1 -f file
Beispielskriptdatei für Stapel von Dateien in einem Verzeichnis:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Die Befehlsoption -f
macht psql
SQL-Befehle in einer Datei ausführen.
So erstellen Sie eine Datenbank basierend auf einer vorhandenen Vorlage auf der Befehlszeile
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
Die Befehlsoption -c
macht psql
Ausführen einer einzelnen SQL-Befehlszeichenfolge. Kann aus mehreren Befehlen bestehen, die durch ;
abgeschlossen werden - wird in einem ausgeführt Transaktion und nur das Ergebnis des letzten zurückgegebenen Befehls.
Lesen Sie mehr über psql-Befehlsoptionen im Handbuch.
Wenn Sie keine Datenbank zum Herstellen einer Verbindung bereitstellen, psql
stellt eine Verbindung zur standardmäßigen Wartungsdatenbank mit dem Namen "postgres" her. Bei der zweiten Antwort ist es unerheblich, zu welcher Datenbank wir uns verbinden.