¿Cómo ejecutar una consulta desde psql sin esperar el resultado?

9

Mi consulta (para crear una nueva tabla a partir de una tabla existente) lleva mucho tiempo. Así que configuré una base de datos remota en mi oficina, más RAM allí.

Puedo conectarme a mi base de datos desde casa como de costumbre con psql.

¿Cómo puedo decirle al servidor remoto que ejecute mi consulta desde el terminal sin tener que esperar una respuesta?

(postgresql-9.2, entorno de linux)

Editar: estoy abierto a otras soluciones, no es necesario usar psql

usuario528025
fuente

Respuestas:

6

Dado que usted declara que está abierto a otras soluciones, podría sugerir que busque multiplexores de terminal como screen o tmux . En mi opinión, tmux es una mejor opción debido a su nombre único (más fácil de obtener resultados relevantes en los motores de búsqueda).

Esencialmente, este tipo de software le permite desconectarse de un shell y luego reanudar la sesión.

c0dem4gnetic
fuente
1
Funciona de tmuxesta manera: "¿Podré apagar mi máquina local y la consulta aún se procesará en el servidor remoto"?
dezso
Sí, la sesión se está ejecutando en la máquina remota: un corte de energía o pérdida de conexión a Internet no es un problema (en relación con la sesión remota :)). Tenga en cuenta que debe iniciar el proceso desde el multiplexor terminal (afaik).
c0dem4gnetic
¿Puedes dar una guía de cómo se implementa esto? psql¿se está ejecutando el software cliente en su máquina local y luego se tmuxestá sshconectando a una máquina remota que ejecuta un servidor postgres? Si ese es el caso, lamentablemente me di cuenta de que esto no funcionará con una instancia de Redshift sin que también se ejecute un EC2.
Merlin
@Merlin tmux se ejecuta en la máquina remota y establece la sesión de shell. Es a partir de esto que se separan y atan. Al ejecutar psql localmente, puede ejecutarlo en una sesión tmux, pero la conexión del cliente solo se mantiene mientras las condiciones de la red lo permitan, al igual que una sesión ssh normal.
c0dem4gnetic
@ c0dem4gnetic creo que psql todavía debe estar instalado en el servidor remoto. Parece que tmux local -> EC2 + tmux + psql inicia sesión en redshift / postgres db para mantener viva la sesión.
Merlín
8

Puedes intentar enviar psqla segundo plano:

psql -f your_sql_file.sql &

O, conectándose a la base de datos local, puede usar dblinkpara enviar una consulta a la base de datos remota:

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

Tenga en cuenta que dblink_send_querysolo puede enviar una consulta a la vez. Por lo tanto, si desea ejecutar varias instrucciones SQL, esta no es su solución.

O bien, puede iniciar un pg_agenttrabajo en el servidor remoto, que no requiere intervención manual, por lo tanto, el estado de su cuadro de inicio no tiene ningún efecto en la ejecución de su trabajo. Lo mismo puede lograrse configurando un trabajo cron(o incluso mejor, atgracias, Erwin) ejecutando su script.

Además, si tiene un trabajo de larga duración que inicia manualmente, puede iniciar una screensesión en el servidor y ejecutar el archivo desde allí. En este caso, puede cerrar sesión e irse a casa, y el script seguirá ejecutándose.

dezso
fuente
pg_agent parece bastante prometedor. Lo intentaré y actualizaré los resultados.
user528025
3
O, para una operación de una sola vez, el atcomando podría servirle mejor que cron.
Erwin Brandstetter