postgreSQL-psql \ i : 주어진 경로에서 스크립트를 실행하는 방법


79

저는 postgreSQL을 처음 사용하며 간단한 질문이 있습니다.

나중에 다음과 같이 호출 할 수 있도록 DB를 만드는 간단한 스크립트를 만들려고합니다.

psql -f createDB.sql

스크립트가 다음과 같이 다른 스크립트 (테이블 생성, 제약 조건, 함수 추가 등을위한 별도의 스크립트)를 호출하기를 원합니다.

\i script1.sql
\i script2.sql

createDB.sql이 동일한 디렉토리 에 있으면 제대로 작동합니다 .

그러나 script2를 createDB가있는 디렉토리 아래의 디렉토리로 이동하고 createDB를 수정하면 다음과 같이 보입니다.

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

오류가 발생합니다.

psql : createDB.sql : 2 : somedir : 권한이 거부되었습니다.

Windows 용 Postgres Plus 8.3, 기본 postgres 사용자를 사용하고 있습니다.

편집하다:

바보, 유닉스 슬래시가 문제를 해결했습니다.

답변:


105

Postgres는 Linux / Unix에서 시작되었습니다. 나는 그것을 고쳐서 슬래시를 뒤집는 것으로 의심됩니다.

\i somedir/script2.sql 

무언가를 완전히 검증해야하는 경우

\i c:/somedir/script2.sql

그래도 문제가 해결되지 않으면 백 슬래시를 피해야 할 것 같습니다.

\i somedir\\script2.sql

7
슬래시를 뒤집는 것으로 충분했고 이스케이프가 필요하지 않았습니다.
Dave

2
참고로 슬래시는 Windows에서 완벽하게 유효하며 기본적으로 지원됩니다. 따라서 잘못 작성된 응용 프로그램을 제외하고 Windows의 거의 모든 곳에서 슬래시를 사용할 수 있습니다. 백 슬래시는 종종 이스케이프 문자로 사용되기 때문에 해당 동작은 응용 프로그램간에 일관성이 없으며 단일 응용 프로그램 내부에서 사용되기도합니다.
Kat

6

Unix 스타일 슬래시 (\ 대신 /)를 사용해 보셨습니까?

\는 종종 이스케이프 또는 명령 문자이며 혼동의 원인이 될 수 있습니다. 나는 이것에 문제가 없었지만 Windows도 없어서 테스트 할 수 없습니다.

또한 권한은 psql을 실행하는 사용자 또는 포스트 마스터 서비스를 실행하는 사용자를 기반으로 할 수 있습니다. 둘 다 해당 디렉터리에서 해당 파일을 읽었는지 확인합니다.


3

이걸 해봐, 난 그렇게하기 위해 노력해

\i 'somedir\\script2.sql'

0

나는 이것을 시도하고 특정 스키마에서 SQL 파일을 실행하기 위해 Windows 시스템에서 작업했습니다.

psql -h localhost -p 5432 -U 사용자 이름 -d databasename -v schema = schemaname <e : \ Table.sql

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.