Bagaimana cara menjalankan kueri dari psql tanpa menunggu hasilnya?

9

Permintaan saya (untuk membuat tabel baru dari tabel yang ada) membutuhkan waktu yang sangat lama. Jadi saya sudah membuat basis data jauh di kantor saya - lebih banyak RAM di sana.

Saya dapat terhubung ke database saya dari rumah seperti biasa dengan psql.

Bagaimana saya bisa memberi tahu server jarak jauh untuk menjalankan permintaan saya dari terminal tanpa harus menunggu jawaban?

(postgresql-9.2, linux enviroment)

Sunting: Saya terbuka untuk solusi lain, tidak perlu menggunakan psql

pengguna528025
sumber

Jawaban:

6

Karena Anda menyatakan bahwa Anda terbuka untuk solusi lain, saya mungkin menyarankan melihat terminal multiplexer seperti layar atau tmux . Menurut pendapat saya tmux adalah pilihan yang lebih baik karena namanya yang unik (lebih mudah untuk mendapatkan hit yang relevan di mesin pencari).

Pada dasarnya perangkat lunak semacam ini memungkinkan Anda untuk melepaskan diri dari shell dan kemudian melanjutkan sesi.

c0dem4gnetic
sumber
1
Apakah tmuxbekerja seperti ini: 'Apakah saya dapat mematikan mesin lokal saya, dan permintaan masih diproses di server jauh'?
dezso
Ya, sesi sedang berjalan di mesin jarak jauh - pemadaman listrik atau kehilangan koneksi internet adalah masalah non (sehubungan dengan sesi jarak jauh :)). Perhatikan bahwa Anda perlu memulai proses dari dalam terminal multiplexer (afaik).
c0dem4gnetic
dapatkah Anda memberikan panduan tentang bagaimana ini diterapkan? psqlapakah perangkat lunak klien itu berjalan di mesin lokal Anda, lalu tmuxapakah membuat sshkoneksi ke mesin jarak jauh menjalankan server postgres? Jika itu masalahnya saya sayangnya menyadari ini tidak akan bekerja dengan contoh Redshift tanpa menjalankan EC2 juga.
Merlin
@Merlin tmux berjalan pada mesin jarak jauh dan membuat sesi shell. Dari sinilah Anda melepaskan dan menempel. Saat menjalankan psql secara lokal, Anda bisa menjalankannya dalam sesi tmux, tetapi koneksi klien hanya disimpan selama kondisi jaringan memungkinkan - sama seperti sesi ssh biasa.
c0dem4gnetic
@ c0dem4gnetic saya pikir psql masih harus diinstal pada server jarak jauh. Sepertinya tmux lokal -> EC2 + tmux + psql masuk ke redshift / postgres db untuk menjaga sesi tetap hidup.
Merlin
8

Anda dapat mencoba mengirim psqlke latar belakang:

psql -f your_sql_file.sql &

Atau, dengan menghubungkan ke DB lokal, Anda dapat menggunakan dblinkuntuk mengirim kueri ke DB jarak jauh:

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

Perhatikan bahwa dblink_send_queryhanya dapat mengirim satu permintaan pada suatu waktu. Jadi, jika Anda ingin menjalankan beberapa pernyataan SQL, ini bukan solusi Anda.

Atau, Anda dapat memulai pg_agentpekerjaan di server jauh, yang tidak memerlukan intervensi manual, oleh karena itu keadaan kotak rumah Anda tidak berpengaruh dalam menjalankan pekerjaan Anda. Hal yang sama dapat dicapai dengan menyiapkan cron(atau bahkan lebih baik, at- terima kasih, Erwin) menjalankan skrip Anda.

Selain itu, jika Anda memiliki pekerjaan yang berjalan lama yang Anda mulai secara manual, Anda dapat memulai screensesi di server dan menjalankan file dari sana. Dalam hal ini, Anda dapat keluar dan pulang, dan skrip akan tetap berjalan.

dezso
sumber
pg_agent terlihat cukup menjanjikan. Saya akan mencobanya dan memperbarui hasilnya.
user528025
3
Atau, untuk operasi satu kali, atperintah mungkin melayani Anda lebih baik daripada cron.
Erwin Brandstetter