Làm thế nào để thực hiện một truy vấn từ psql mà không cần chờ kết quả?


9

Truy vấn của tôi (để tạo một bảng mới từ bảng hiện có) mất một thời gian rất dài. Vì vậy, tôi đã thiết lập một cơ sở dữ liệu từ xa trong văn phòng của mình - có thêm RAM ở đó.

Tôi có thể kết nối với cơ sở dữ liệu của mình ở nhà như bình thường với psql.

Làm thế nào tôi có thể yêu cầu máy chủ từ xa thực hiện truy vấn của mình từ thiết bị đầu cuối mà không phải chờ phản hồi?

(postgresql-9.2, môi trường linux)

Chỉnh sửa: Tôi đang mở cho các giải pháp khác, không cần thiết phải sử dụng psql

Câu trả lời:


6

Vì bạn nói rằng bạn đang mở cho các giải pháp khác, tôi có thể đề nghị xem xét các bộ ghép kênh đầu cuối như màn hình hoặc tmux . Theo tôi, tmux là một lựa chọn tốt hơn do tên độc đáo của nó (dễ dàng có được các lượt truy cập có liên quan trong các công cụ tìm kiếm).

Về cơ bản loại phần mềm này cho phép bạn tách ra khỏi vỏ và sau đó tiếp tục phiên.


1
tmuxhoạt động theo cách này không: 'Tôi có thể tắt máy cục bộ của mình không và truy vấn vẫn được xử lý tại máy chủ từ xa'?
dezso

Có, phiên đang chạy trên máy từ xa - mất điện hoặc mất kết nối internet là một vấn đề không liên quan (đối với phiên từ xa :)). Lưu ý rằng bạn cần bắt đầu quá trình từ bên trong bộ ghép kênh đầu cuối (afaik).
c0dem4g từ

bạn có thể cung cấp hướng dẫn về cách thức này được thực hiện? psqllà phần mềm máy khách đang chạy trên máy cục bộ của bạn, sau đó tmuxsshkết nối với máy từ xa đang chạy máy chủ postgres không? Nếu đó là trường hợp tôi buồn bã nhận ra điều này sẽ không hoạt động với phiên bản Redshift mà không có EC2 chạy.
Merlin

@Merlin tmux chạy trên máy từ xa và thiết lập phiên shell. Đó là từ điều này mà bạn tách ra và đính kèm. Khi chạy psql cục bộ, bạn có thể chạy nó trong phiên tmux, nhưng kết nối máy khách chỉ được duy trì miễn là điều kiện mạng cho phép - giống như phiên ssh bình thường.
c0dem4g từ

@ c0dem4g từ tôi nghĩ rằng psql vẫn phải được cài đặt trên máy chủ từ xa. Có vẻ như tmux cục bộ -> EC2 + tmux + psql đăng nhập vào redshift / postgres db để giữ cho phiên hoạt động.
Merlin

8

Bạn có thể thử gửi psqlđến nền:

psql -f your_sql_file.sql &

Hoặc, kết nối với DB cục bộ, bạn có thể sử dụng dblinkđể gửi một truy vấn đến DB từ xa:

SELECT dblink_connect('your_connection_name', 'your_connection_string');
SELECT dblink_send_query('your_connection_name', 'your_query');

Lưu ý rằng dblink_send_querychỉ có thể gửi một truy vấn tại một thời điểm. Vì vậy, nếu bạn muốn chạy nhiều câu lệnh SQL, đây không phải là giải pháp của bạn.

Hoặc, bạn có thể bắt đầu một pg_agentcông việc trên máy chủ từ xa, không yêu cầu can thiệp thủ công, do đó trạng thái của hộp nhà bạn không có tác dụng trong việc điều hành công việc của bạn. Điều tương tự có thể đạt được bằng cách thiết lập một công việc cron(hoặc thậm chí tốt hơn, at- cảm ơn, Erwin) thực thi kịch bản của bạn.

Ngoài ra, nếu bạn có một công việc dài mà bạn bắt đầu bằng tay, bạn có thể bắt đầu một screenphiên trên máy chủ và chạy tệp từ đó. Trong trường hợp này, bạn có thể đăng xuất và về nhà, và tập lệnh sẽ tiếp tục chạy.


pg_agent trông đủ hứa hẹn. Tôi sẽ thử nó và cập nhật kết quả.
dùng528025

3
Hoặc, đối với hoạt động một lần, atlệnh có thể phục vụ bạn tốt hơn so với cron.
Erwin Brandstetter
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.