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

use*_*025 10 postgresql psql

我的查询(从现有表创建新表)需要很长时间。所以我在我的办公室建立了一个远程数据库——那里有更多的内存。

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

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

(postgresql-9.2 , linux 环境)

编辑:我对其他解决方案持开放态度,没有必要使用 psql

dez*_*zso 9

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

psql -f your_sql_file.sql &
Run Code Online (Sandbox Code Playgroud)

或者,连接到本地数据库,您可以使用dblink将查询分派到远程数据库:

SELECT dblink_connect('your_connection_name', 'your_connection_string');
SELECT dblink_send_query('your_connection_name', 'your_query');
Run Code Online (Sandbox Code Playgroud)

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

或者,您可以pg_agent在远程服务器上启动一项作业,这不需要手动干预,因此您的家庭设备的状态对运行您的作业没有影响。通过设置cron(甚至更好,at- 谢谢,Erwin)作业执行您的脚本可以实现相同的目的。

此外,如果您有一个手动启动的长时间运行的作业,您可以screen在服务器上启动一个会话并从那里运行该文件。在这种情况下,您可以注销并回家,脚本将继续运行。

  • 或者,对于一次性操作,[`at` 命令](http://en.wikipedia.org/wiki/At_%28Unix%29) 可能比 cron 更适合您。 (3认同)

小智 6

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

本质上,这种软件允许您从外壳分离并稍后恢复会话。