2015-01-14 42 views
8

Tôi có một loạt các tập lệnh SQL để tạo các bảng trong cơ sở dữ liệu. Mỗi bảng nằm trong một tệp riêng biệt để chỉnh sửa chúng dễ dàng hơn nhiều.Làm cách nào để chạy tập lệnh sql postgres từ tập lệnh khác?

Tôi muốn chuẩn bị một kịch bản lệnh SQL để tạo lược đồ đầy đủ, tạo bảng, chèn dữ liệu thử nghiệm và tạo chuỗi cho các bảng.

Tôi đã có thể làm điều đó cho cơ sở dữ liệu oracle nhưng tôi gặp vấn đề với postgres. Vấn đề là - Tôi không biết cách chạy bảng tạo tập lệnh từ tập lệnh khác.

Trong oracle tôi làm điều đó bằng cách sử dụng cú pháp sau:

@@'path of the script related to the path of the currently running sql file' 

Và mọi thứ hoạt động như một nét duyên dáng.

Trong postgres Tôi đã cố gắng để tìm kiếm một cái gì đó giống nhau và thấy điều này:

\ir 'relative path to the file' 

Thật không may khi tôi chạy kịch bản chính của tôi, tôi nhận được thông báo:

No such file or directory. 

Cuộc gọi ví dụ là ở đây:

\ir './tables/map_user_groups.sql' 

Tôi sử dụng Postgres 9.3. Tôi đã cố gắng chạy tập lệnh bằng cách sử dụng psql:

psql -U postgres -h localhost -d postgres < "path to my main sql file" 

Tệp thực thi tốt ngoại trừ việc gọi các tập lệnh khác.

Có ai biết cách giải quyết vấn đề không?

Nếu một cái gì đó trong câu hỏi không rõ ràng - chỉ cho tôi biết :)

+0

Trong đó hệ điều hành được bạn cố gắng để thực hiện điều này? – rchang

+4

'psql -U postgres -h localhost -d postgres <" đường dẫn đến tệp sql chính của tôi "': từ quan điểm của psql tệp main_sql chỉ là stdin. stdin không có "tên tệp"; sử dụng '-f filename' để gửi một tập tin ** với ** một tên. – wildplasser

+1

Cảm ơn bạn @ wildplasser, đó là nó :) rchang Tôi làm điều đó trên Windows 7 Professional –

Trả lời

1

Dựa trên câu trả lời It is possible to reference another SQL file from SQL script, trên PostgreSQL, bạn có thể đưa các file khác của SQL chỉ sử dụng cú pháp \i. Tôi chỉ thử nghiệm và đang làm việc tốt trên PostgreSQL 9.6:

\i other_script.sql 
SELECT * FROM table_1; 
SELECT * FROM table_2; 

Bằng những nhận xét @wildplasser:

psql -U postgres -h localhost -d postgres < "path to my main sql file" 

Từ quan điểm psql của file main_sql chỉ là stdin, và stdin không có "filename". Sử dụng -f filename nộp một tập tin với một cái tên:

psql -U postgres -h localhost -d postgres -f filename.sql 

Làm thế nào để chạy postgres sql script từ kịch bản khác?

vẻ cùng một câu hỏi như: How to import external sql scripts from a sql script in PostgreSQL?

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