gọi nhiều tệp Sql trong một tệp SQL trong Postgres


11

Làm thế nào để gọi nhiều tệp sql trong một tệp sql, trong postgres

Ví dụ: tôi có aaa.sql, bbb.sql, ccc.sql.

Tôi muốn thực hiện 3 tập tin này từ xxx.sql.

Bất cứ ai có thể đề nghị tôi làm thế nào để làm điều này.

Câu trả lời:


12

Nếu bạn đang chạy các tệp này thông qua psqlbạn muốn có lệnh \i("thực thi các lệnh từ tệp").

xxx.sql:

\i aaa.sql
\i bbb.sql
\i ccc.sql

Nếu bạn chuyển các chương trình này qua một số chương trình khác, bạn sẽ cần phải tự kết hợp các tệp - tôi không tin có bất kỳ cách nào để thực hiện các tệp bên ngoài theo tiêu chuẩn SQL.


Cảm ơn bạn đã trả lời. Tôi sẽ kiểm tra và xác nhận xem tôi có thể đạt được nó hay không
Chuyến đi

Không có vẻ như đang làm việc Chưa chắc chắn nếu tôi thiếu một cái gì đó. Tôi có cần bán đại tràng ở cuối không ??? -Không thật !!!
Chuyến đi

1
Bạn cần phải cụ thể hơn là "không hoạt động" - Tôi đảm bảo với bạn điều này không hoạt động - Tham khảo hướng dẫn sử dụng psql
voretaq7

Nó đã làm việc. Cuối cùng :-) Thanku Vấn đề là - nó không thể nhận ra tệp và O đã chỉ định đường dẫn tương đối cho tệp và nó hoạt động Cảm ơn bạn một lần nữa
Chuyến đi

@Trip Chuyến đi, đừng quên cung cấp tín dụng voretaq cho câu trả lời của anh ấy!
Richard T

4

Không chính xác những gì bạn đang yêu cầu, nhưng sẽ phục vụ mục đích của bạn: 1) Đặt tất cả các tệp tập lệnh của bạn vào một thư mục; và 2) sử dụng tập lệnh bash để lặp qua các tệp của bạn và chạy psql. Ví dụ:

SCRIPTS_DIR=/home/myproject/scripts
DATABASE_NAME=database_name

for file in $SCRIPTS_DIR/*.sql
    do sudo -u postgres psql $DATABASE_NAME -f $file
done

Thực tế điều này tốt hơn một chút vì bạn sẽ không phải nhập tên tệp của mình.


3

Trên một bash shell bạn có thể làm điều đó với một cách đơn giản find -exec

find sql/ -name *.sql -exec psql -U user -f {} \;

Yêu cầu bạn sử dụng "*.sql"chứ không phải*.sql
Jeel Shah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.