2008-09-24 16 views
70

Jestem nowy na PostgreSQL i mam proste pytanie:postgreSQL - psql i: jak wykonać skryptu w danej ścieżki

Próbuję utworzyć prosty skrypt, który tworzy DB więc mogę później nazwać tak:

psql -f createDB.sql 

Chcę skrypt zadzwonić innych skryptów (osobne te do tworzenia tabel, dodając ograniczenia, funkcje itp), podobnie jak to:

\i script1.sql 
\i script2.sql 

działa dobrze pod warunkiem, że stworzony B.sql jest w tym samym katalogu.

Ale jeśli przeniosę script2 do katalogu pod jednym z createdb i modyfikowania createdb więc wygląda to tak:

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

pojawia się błąd:

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

jestem przy użyciu Postgres Plus 8.3 dla Windows, domyślny użytkownik PostgreSQL.

EDIT:

Silly me, UNIX tnie rozwiązało problem.

Odpowiedz

91

Postgres rozpoczął na systemie Linux/Unix. Podejrzewam, że odwracam ukośnik i naprawię go.

\i somedir/script2.sql 

Jeśli chcesz w pełni kwalifikuje się coś

\i c:/somedir/script2.sql 

Jeśli to nie pomoże, moja następna przypuszczenie byłoby trzeba uciec backslash.

\i somedir\\script2.sql 
+4

Odwracanie ukośników było wystarczające, nie było konieczności ucieczek. –

+2

Należy zauważyć, że ukośniki do przodu są doskonale poprawne w systemie Windows i są natywnie obsługiwane. Więc możesz używać ukośników do przodu prawie wszędzie w Windows (z wyjątkiem źle napisanych aplikacji). Ponieważ ukośnik odwrotny jest często używany jako znak ucieczki, jego zachowanie będzie niespójne między aplikacjami, a nawet zastosowane w pojedynczej aplikacji. – Kat

6

Czy próbowałeś używać ukośników w stylu uniksowym (/ zamiast \)?

\ jest często znakiem ucieczki lub polecenia i może być źródłem nieporozumień. Nigdy nie miałem z tym problemów, ale nie mam też systemu Windows, więc nie mogę go przetestować.

Ponadto uprawnienia mogą być oparte na użytkowniku psql lub użytkownika uruchamiającym usługę postmaster, sprawdź, czy oba zostały wczytane do tego pliku w tym katalogu.

3

Spróbuj tego, pracuję sam to zrobić

\i 'somedir\\script2.sql' 
0

Próbowałem tego i jego obróbce w komputerze z systemem Windows do uruchomienia pliku SQL w określonym schemacie.

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

Powiązane problemy