Sonucu beklemeden psql'den bir sorgu nasıl çalıştırılır?


9

Sorgum (mevcut tablodan yeni bir tablo oluşturmak için) çok uzun zaman alıyor. Bu yüzden ofisime uzak bir veritabanı kurdum - daha fazla RAM.

Ben veritabanına her zamanki gibi psql ile bağlanabilirsiniz.

Uzak sunucuya, yanıt beklemek zorunda kalmadan sorgumu terminalden yürütmesini nasıl söyleyebilirim?

(postgresql-9.2, linux çevre)

Düzenleme: Diğer çözümlere açığım, psql kullanmak gerekli değil

Yanıtlar:


6

Diğer çözümlere açık olduğunuzu belirttiğiniz için, ekran veya tmux gibi terminal çoklayıcılarına bakmanızı önerebilirim . Bence tmux benzersiz adı (arama motorlarında alakalı isabetler almak daha kolay) nedeniyle daha iyi bir seçimdir.

Temelde bu tür bir yazılım bir kabuktan ayrılmanıza ve daha sonra oturuma devam etmenize izin verir.


1
Şu tmuxşekilde çalışır: 'Yerel makinemi kapatabilir miyim ve sorgu yine de uzak sunucuda işlenecek mi?'
dezso

Evet, oturum uzak makinede çalışıyor - elektrik kesintisi veya internet bağlantısının kesilmesi bir sorun değil (uzak oturumla ilgili olarak :)). İşlemi terminal çoklayıcı (afaik) içinden başlatmanız gerektiğini unutmayın.
c0dem4gnetic

bunun nasıl uygulandığına dair rehberlik sağlayabilir misiniz? psqlistemci yazılımı şu yerel makinenizde çalışıyor, sonra postgres sunucusu çalıştıran uzak bir makineye bağlantı tmuxyapıyor sshmu? Ne yazık ki bunun bir EC2 de çalışmadan bir Redshift örneğiyle çalışmadığını fark ettim.
Merlin

@Merlin tmux uzak makinede çalışır ve kabuk oturumunu oluşturur. Bundan ayırıp takıyorsunuz. Psql'yi yerel olarak çalıştırırken bir tmux oturumunda çalıştırabilirsiniz, ancak istemci bağlantısı yalnızca ağ koşulları izin verdiği sürece - normal bir ssh oturumu gibi - korunur.
c0dem4gnetic

@ c0dem4gnetic Ben psql hala uzak sunucuya yüklü olması gerektiğini düşünüyorum. Oturumu canlı tutmak için yerel tmux -> EC2 + tmux + psql kırmızıya kayma / postgres db'ye giriş yapıyor gibi görünüyor.
Merlin

8

psqlArka plana göndermeyi deneyebilirsiniz :

psql -f your_sql_file.sql &

Veya yerel DB'ye bağlanırken dblink, uzak DB'ye bir sorgu göndermek için kullanabilirsiniz :

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

dblink_send_queryBir kerede yalnızca bir sorgu gönderebileceğini unutmayın . Bu nedenle, birden çok SQL deyimi çalıştırmak istiyorsanız, bu sizin çözümünüz değildir.

Veya pg_agentuzak sunucuda elle müdahale gerektirmeyen bir iş başlatabilirsiniz , bu nedenle ev kutunuzun durumunun işinizi yürütme üzerinde bir etkisi yoktur. Aynı şey , senaryonuzu yürüten cron(ya da daha iyisi, at- teşekkürler, Erwin) bir iş kurarak da elde edilebilir .

Ayrıca, el ile başlattığınız uzun süren bir işiniz varsa screen, sunucuda bir oturum başlatabilir ve dosyayı oradan çalıştırabilirsiniz. Bu durumda oturumu kapatabilir ve eve gidebilirsiniz; komut dosyası çalışmaya devam eder.


pg_agent yeterince ümit verici görünüyor. Deneyeceğim ve sonuçları güncelleyeceğim.
user528025

3
Veya bir kerelik bir işlem için, atkomut size cron'dan daha iyi hizmet edebilir.
Erwin Brandstetter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.