如何在不等待结果的情况下从psql执行查询?


9

我的查询(从现有表创建新表)需要很长时间。因此,我在办公室中建立了一个远程数据库-那里有更多RAM。

我可以像往常一样使用psql从家里连接到数据库。

如何告诉远程服务器从终端执行我的查询而不必等待响应?

(postgresql-9.2,Linux环境)

编辑:我愿意接受其他解决方案,没有必要使用psql

Answers:


6

由于您声明对其他解决方案持开放态度,因此我建议您查看一下screentmux之类的终端多路复用器。在我看来,由于tmux的独特名称(更容易在搜索引擎中获得相关点击量),因此它是一个更好的选择。

从本质上讲,这种软件使您可以从Shell分离,然后再恢复会话。


1
是否tmux可以这样工作:“我将能够关闭本地计算机,并且查询仍在远程服务器上进行”?
dezso 2012年

是的,该会话正在远程计算机上运行-断电或互联网连接断开都不是问题(对于远程会话:))。请注意,您需要从终端多路复用器(afaik)中启动该过程。
c0dem4gnetic 2012年

您可以提供有关实施方法的指南吗?psql是客户端软件在本地计算机上运行,​​然后与运行Postgres服务器的远程计算机tmux建立ssh连接?如果是这种情况,我很遗憾地意识到,如果没有EC2运行,这将无法用于Redshift实例。
默林

@Merlin tmux在远程计算机上运行并建立shell会话。与此分离并附加。在本地运行psql时,可以在tmux会话中运行它,但是仅在网络条件允许的情况下保持客户端连接-就像正常的ssh会话一样。
c0dem4gnetic

@ c0dem4gnetic我认为仍然必须在远程服务器上安装psql。好像是本地tmux-> EC2 + tmux + psql登录到redshift / postgres db中以保持会话有效。
Merlin

8

您可以尝试发送psql到后台:

psql -f your_sql_file.sql &

或者,连接到本地数据库,您可以dblink用来将查询调度到远程数据库:

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

注意 dblink_send_query一次只能发送一个查询。因此,如果您要运行多个SQL语句,那么这不是您的解决方案。

或者,您可以pg_agent在不需要手动干预的远程服务器上启动作业,因此主目录盒的状态对运行作业没有影响。通过设置cron(或什至更好,at-谢谢,Erwin)执行脚本来完成相同的任务。

此外,如果您需要手动启动长期运行的作业,则可以screen在服务器上启动会话并从那里运行文件。在这种情况下,您可以注销并返回首页,脚本将继续运行。


pg_agent看起来很有希望。我将尝试并更新结果。
user528025 2012年

3
或者,对于一次性操作,该at命令可能比cron更好。
Erwin Brandstetter,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.