Come eseguire una query da psql senza attendere il risultato?


9

La mia query (per creare una nuova tabella da una tabella esistente) richiede molto tempo. Quindi ho creato un database remoto nel mio ufficio - più RAM lì.

Posso collegarmi al mio database da casa come al solito con psql.

Come posso dire al server remoto di eseguire la mia query dal terminale senza dover attendere una risposta?

(postgresql-9.2, ambiente Linux)

Modifica: sono aperto ad altre soluzioni, non è necessario utilizzare psql

Risposte:


6

Dato che dichiari di essere aperto ad altre soluzioni, potrei suggerire di esaminare i multiplexer terminali come screen o tmux . A mio avviso, tmux è una scelta migliore grazie al suo nome univoco (più facile ottenere risultati pertinenti nei motori di ricerca).

Fondamentalmente questo tipo di software consente di staccare da una shell e riprendere successivamente la sessione.


1
Funziona in tmuxquesto modo: "Sarò in grado di arrestare il mio computer locale e la query verrà comunque eseguita sul server remoto"?
dezso,

Sì, la sessione è in esecuzione sul computer remoto: un'interruzione di corrente o perdita di connessione a Internet non è un problema (per quanto riguarda la sessione remota :)). Si noti che è necessario avviare il processo dall'interno del multiplexer terminale (afaik).
c0dem4gnetic,

puoi fornire una guida su come questo è implementato? psqlè il software client che è in esecuzione sul tuo computer locale, quindi tmuxsta effettuando la sshconnessione a un computer remoto che esegue un server Postgres? In questo caso, purtroppo, ho capito che non funzionerà con un'istanza Redshift senza un EC2 in esecuzione.
Merlin,

@Merlin tmux viene eseguito sul computer remoto e stabilisce la sessione di shell. È da questo che ti stacchi e ti allego. Quando si esegue psql localmente, è possibile eseguirlo in una sessione tmux, ma la connessione client viene mantenuta solo finché le condizioni di rete lo consentono, proprio come una normale sessione ssh.
c0dem4gnetic,

@ c0dem4gnetic penso che psql debba ancora essere installato sul server remoto. Sembra tmux locale -> EC2 + tmux + psql registrandosi in redshift / postgres db per mantenere viva la sessione.
Merlino,

8

Puoi provare a inviare psqlin background:

psql -f your_sql_file.sql &

Oppure, connettendosi al DB locale, è possibile utilizzare dblinkper inviare una query al DB remoto:

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

Si noti che dblink_send_querypuò inviare solo una query alla volta. Quindi, se si desidera eseguire più istruzioni SQL, questa non è la soluzione.

In alternativa, è possibile avviare un pg_agentlavoro sul server remoto, che non richiede alcun intervento manuale, pertanto lo stato della propria home box non ha alcun effetto sull'esecuzione del lavoro. Lo stesso può essere ottenuto impostando un lavoro cron(o meglio, atgrazie, Erwin) che esegue il tuo script.

Inoltre, se si dispone di un processo in esecuzione da molto tempo che si avvia manualmente, è possibile avviare una screensessione sul server ed eseguire il file da lì. In questo caso, è possibile disconnettersi e tornare a casa e lo script continuerà a funzionare.


pg_agent sembra abbastanza promettente. Lo proverò e aggiornerò i risultati.
user528025

3
Oppure, per un'operazione di una volta, il atcomando potrebbe servire meglio di cron.
Erwin Brandstetter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.