it-swarm.com.de

postgreSQL - psql \ i: wie man ein Skript in einem bestimmten Pfad ausführt

Ich bin neu in PostgreSQL und habe eine einfache Frage:

Ich versuche, ein einfaches Skript zu erstellen, das eine Datenbank erstellt, damit ich sie später folgendermaßen aufrufen kann:

psql -f createDB.sql

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

\i script1.sql
\i script2.sql

Es funktioniert einwandfrei, vorausgesetzt, createDB.sql befindet sich im gleichen 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 einen Fehler:

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

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

EDIT:

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

76
dahpgjgamgan

Postgres wurde unter Linux/Unix gestartet. Ich vermute, dass der Schrägstrich mit fix es umgekehrt.

\i somedir/script2.sql 

Wenn Sie etwas voll qualifizieren müssen

\i c:/somedir/script2.sql

Wenn dies das Problem nicht behebt, müsste ich als nächstes davon ausgehen, dass Sie dem Backslash entkommen müssen.

\i somedir\\script2.sql
102
Steve K

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

\ ist häufig ein Escape- oder Befehlszeichen und kann Verwirrung stiften. Ich hatte noch nie Probleme damit, aber ich habe auch kein Windows, also kann ich es nicht testen.

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

6
Grant Johnson

Probieren Sie es aus, ich arbeite selbst daran

\i 'somedir\\script2.sql'
3
phipex

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

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

0
shiba sahu