postgreSQL - psql \ i: Ausführen eines Skripts in einem bestimmten Pfad

78

Ich bin neu in postgreSQL und habe eine einfache Frage:

Ich versuche, ein einfaches Skript zu erstellen, das eine Datenbank erstellt, damit ich es später so aufrufen kann:

psql -f createDB.sql

Ich möchte, dass das Skript andere Skripte aufruft (separate zum Erstellen von Tabellen, Hinzufügen von Einschränkungen, Funktionen usw.), wie folgt:

\i script1.sql
\i script2.sql

Es funktioniert gut, vorausgesetzt, createDB.sql befindet sich im selben Verzeichnis .

Aber wenn ich script2 in ein Verzeichnis unter dem mit createDB verschiebe und die createDB so ändere, dass sie so aussieht:

\i script1.sql
\i somedir\script2.sql

Ich erhalte eine Fehlermeldung:

psql: createDB.sql: 2: somedir: Berechtigung verweigert

Ich verwende Postgres Plus 8.3 für Windows, Standardbenutzer von Postgres.

BEARBEITEN:

Blöd mich, Unix-Schrägstriche haben das Problem gelöst.

dahpgjgamgan
quelle

Antworten:

105

Postgres wurde unter Linux / Unix gestartet. Ich vermute, dass das Umkehren des Schrägstrichs mit Fix it.

\i somedir/script2.sql 

Wenn Sie etwas vollständig qualifizieren müssen

\i c:/somedir/script2.sql

Wenn sich das nicht beheben lässt, ist meine nächste Vermutung, dass Sie dem Backslash entkommen müssen.

\i somedir\\script2.sql
Steve K.
quelle
7
Das Umkehren der Schrägstriche war ausreichend, Fluchten waren nicht erforderlich.
Dave
2
Bemerkenswert ist, dass Schrägstriche in Windows perfekt gültig sind und von Haus aus unterstützt werden. So können Sie Schrägstriche fast überall in Windows verwenden (mit Ausnahme von schlecht geschriebenen Anwendungen). Da der Backslash häufig als Escape-Zeichen verwendet wird, ist sein Verhalten zwischen Anwendungen inkonsistent und wird sogar innerhalb einer einzelnen Anwendung verwendet.
Kat
6

Haben Sie versucht, Schrägstriche im Unix-Stil (/ anstelle von \) zu verwenden?

\ ist oft ein Escape- oder Befehlszeichen und kann zu Verwirrung führen. Ich hatte noch nie Probleme damit, aber ich habe auch kein Windows, daher kann ich es nicht testen.

Darüber hinaus können die Berechtigungen auf dem Benutzer basieren, der psql ausführt, oder auf dem Benutzer, der den Postmaster-Dienst ausführt. Überprüfen Sie, ob beide in diese Datei in diesem Verzeichnis gelesen haben.

Grant Johnson
quelle
3

Versuchen Sie dies, ich arbeite selbst daran

\i 'somedir\\script2.sql'
Phipex
quelle
0

Ich habe versucht, dies und seine Arbeit in Windows-Maschine, um eine SQL-Datei in einem bestimmten Schema auszuführen.

psql -h localhost -p 5432 -U Benutzername -d Datenbankname -v Schema = Schemaname <e: \ Table.sql

Shiba Sahu
quelle