Como executar uma consulta do psql sem esperar pelo resultado?


9

Minha consulta (para criar uma nova tabela a partir da tabela existente) leva muito tempo. Então, eu configurei um banco de dados remoto no meu escritório - mais RAM lá.

Posso conectar-me ao meu banco de dados em casa, como de costume, com o psql.

Como posso dizer ao servidor remoto para executar minha consulta no terminal sem ter que esperar por uma resposta?

(postgresql-9.2, ambiente linux)

Edit: Estou aberto a outras soluções, não é necessário usar o psql

Respostas:


6

Como você declara estar aberto a outras soluções, eu sugiro olhar para multiplexadores de terminal como screen ou tmux . Na minha opinião, o tmux é uma escolha melhor devido ao seu nome único (mais fácil de obter resultados relevantes nos mecanismos de pesquisa).

Essencialmente, esse tipo de software permite que você se desconecte de um shell e depois retome a sessão.


11
Funciona da tmuxseguinte maneira: 'Conseguirei desligar minha máquina local e a consulta ainda será processada no servidor remoto'?
Dezso

Sim, a sessão está em execução na máquina remota - uma queda de energia ou perda de conexão com a Internet não é um problema (em relação à sessão remota :)). Observe que você precisa iniciar o processo a partir do multiplexador de terminal (afaik).
C0dem4gnetic

você pode fornecer orientações de como isso é implementado? psqlé o software cliente que está sendo executado em sua máquina local e tmuxestá fazendo a sshconexão com uma máquina remota executando um servidor postgres? Se for esse o caso, eu infelizmente percebi que isso não funcionará com uma instância do Redshift sem o EC2 sendo executado também.
Merlin

O @Merlin tmux é executado na máquina remota e estabelece a sessão do shell. É disso que você se destaca e se prende. Ao executar o psql localmente, você pode executá-lo em uma sessão tmux, mas a conexão do cliente é mantida apenas enquanto as condições da rede permitirem - assim como uma sessão ssh normal.
C0dem4gnetic

@ c0dem4gnetic acho que o psql ainda deve estar instalado no servidor remoto. Parece que o local tmux -> EC2 + tmux + psql efetua login no redshift / postgres db para manter a sessão ativa.
Merlin

8

Você pode tentar enviar psqlpara o plano de fundo:

psql -f your_sql_file.sql &

Ou, conectando-se ao banco de dados local, você pode usar dblinkpara enviar uma consulta ao banco de dados remoto:

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

Observe que dblink_send_querysó é possível enviar uma consulta por vez. Portanto, se você deseja executar várias instruções SQL, essa não é a sua solução.

Ou, você pode iniciar um pg_agenttrabalho no servidor remoto, o que não requer intervenção manual; portanto, o estado da sua caixa inicial não afeta a execução do seu trabalho. O mesmo pode ser alcançado configurando um trabalho cron(ou melhor ainda, at- obrigado, Erwin) executando seu script.

Além disso, se você tiver um trabalho de longa execução iniciado manualmente, poderá iniciar uma screensessão no servidor e executar o arquivo a partir daí. Nesse caso, você pode fazer logoff e voltar para casa, e o script continuará sendo executado.


O pg_agent parece promissor o suficiente. Vou tentar e atualizar os resultados.
user528025

3
Ou, para uma operação única, o atcomando pode atendê-lo melhor que o cron.
Erwin Brandstetter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.