2008-09-24 9 views
70

ich postgreSQL bin neu und ich habe eine einfache Frage:postgreSQL - psql i: wie Skript in einem bestimmten Pfad auszuführen

Ich versuche, ein einfaches Skript zu erstellen, die eine DB schafft so kann ich später nennen es wie folgt aus:

psql -f createDB.sql 

ich möchte das Skript andere Skripte aufrufen (getrennte diejenigen Tabellen zum Erstellen, Hinzufügen von Einschränkungen, Funktionen usw.), wie folgt aus:

\i script1.sql 
\i script2.sql 

es funktioniert gut, vorausgesetzt, dass createD B.sql ist in der gleichen dir.

Aber wenn ich script2 in ein Verzeichnis unter dem mit createDB bewegen, und ändern Sie die createDB so sieht es wie folgt aus:

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

ich einen Fehler:

psql:createDB.sql:2: somedir: Permission denied

Ich bin Verwenden von Postgres Plus 8.3 für Windows, Standard Postgres-Benutzer.

EDIT:

Dumme mich, Unix löste das Problem zerschneidet.

Antwort

91

Postgres begann unter Linux/Unix. Ich vermute, dass man den Schrägstrich umkehrt, um ihn zu reparieren.

\i somedir/script2.sql 

Wenn Sie in vollem Umfang etwas

\i c:/somedir/script2.sql 

qualifizieren Wenn das es nicht beheben, meine nächste Vermutung wäre, Sie den Backslash entkommen müssen.

\i somedir\\script2.sql 
+4

Umkehren der Schrägstriche war ausreichend, Escape war nicht notwendig. –

+2

Beachten Sie, dass Forward-Schrägstriche in Windows einwandfrei und nativ unterstützt werden. So können Sie fast überall in Windows Forward Slashes 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, Unix Style Schrägstriche (/ statt \) zu verwenden?

\ ist oft ein Escape- oder Befehlszeichen und kann die Quelle der Verwirrung sein. Ich hatte nie Probleme damit, aber ich habe auch kein Windows, also kann ich es nicht testen.

Darüber hinaus basieren die Berechtigungen möglicherweise auf dem Benutzer, der psql ausführt, oder der Benutzer, der den Postmasterdienst ausführt, überprüft, ob beide Dateien in diesem Verzeichnis gelesen wurden.

3

die Sie interessieren, ich arbeite mich so tun

\i 'somedir\\script2.sql' 
0

ich habe versucht, diese und ihre Arbeits in Windows-Rechner eine SQL-Datei auf einem bestimmten Schema zu laufen.

psql -h localhost -p 5432 -U username -d databasename -v schema=schemaname < e:\Table.sql