2008-09-24 68 views
70

Tôi mới dùng postgreSQL và tôi có một câu hỏi đơn giản:postgreSQL - psql i: cách thực thi tập lệnh trong một đường dẫn nhất định

Tôi đang cố gắng tạo một kịch bản đơn giản tạo DB để tôi có thể sau đó gọi nó là như thế này:

psql -f createDB.sql 

tôi muốn kịch bản để gọi các kịch bản khác (cái riêng biệt cho việc tạo bảng, thêm những hạn chế, chức năng vv), như thế này:

\i script1.sql 
\i script2.sql 

nó hoạt động tốt với điều kiện tạo B.sql nằm trong số cùng một thư mục.

Nhưng nếu tôi di chuyển script2 vào một thư mục dưới một với createDB, và sửa đổi các createDB để nó trông như thế này:

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

tôi nhận được một lỗi:

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

Tôi sử dụng Postgres Plus 8.3 cho windows, người dùng postgres mặc định.

EDIT:

Silly tôi, unix chém giải quyết vấn đề.

Trả lời

91

Postgres bắt đầu trên Linux/Unix. Tôi nghi ngờ rằng đảo ngược dấu gạch chéo với sửa chữa nó.

\i somedir/script2.sql 

Nếu bạn cần phải hoàn toàn đủ điều kiện gì đó

\i c:/somedir/script2.sql 

Nếu điều đó không sửa chữa nó, đoán tiếp theo của tôi sẽ là bạn cần phải thoát khỏi dấu chéo ngược.

\i somedir\\script2.sql 
+4

Đảo ngược dấu gạch chéo là đủ, thoát là không cần thiết. –

+2

Lưu ý rằng các dấu gạch chéo về phía trước là hoàn toàn hợp lệ trong Windows và được hỗ trợ nguyên bản. Vì vậy, bạn có thể sử dụng các dấu gạch chéo phía trước gần như ở khắp mọi nơi trong Windows (ngoại trừ các ứng dụng viết kém). Vì dấu gạch chéo ngược thường được sử dụng như một ký tự thoát, hành vi của nó sẽ không nhất quán giữa các ứng dụng và thậm chí sử dụng bên trong một ứng dụng đơn lẻ. – Kat

6

Bạn đã thử sử dụng dấu gạch chéo kiểu Unix (/ thay vì \) chưa?

\ thường là một lối thoát hoặc ký tự lệnh và có thể là nguồn gây nhầm lẫn. Tôi chưa bao giờ có vấn đề với điều này, nhưng tôi cũng không có Windows, vì vậy tôi không thể kiểm tra nó.

Ngoài ra, các quyền có thể dựa trên người dùng đang chạy psql, hoặc có thể người dùng thực hiện dịch vụ bưu chính, kiểm tra xem cả hai đã đọc tệp đó trong thư mục đó chưa.

3

Hãy thử điều này, tôi làm việc bản thân mình để làm như vậy

\i 'somedir\\script2.sql' 
0

tôi đã làm thử điều này và làm việc của nó trong cửa sổ máy để chạy một file sql trên một sơ đồ cụ thể.

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

Các vấn đề liên quan