【问题标题】:How do I execute a query automatically in PostgreSQL when connecting via shell?通过 shell 连接时,如何在 PostgreSQL 中自动执行查询?
【发布时间】:2016-01-22 02:01:07
【问题描述】:

当我使用psql 连接到 Postgres 时,我希望能够自动执行一条语句,然后保持连接状态,以便我可以输入更多命令。

目前,每次连接时,我首先要做的就是输入:

SET search_path = 'something';

或者我可能想做点别的事情,比如:

SELECT COUNT(*) FROM sometable;

我知道 psql 有一个 -c 参数,它将执行一个命令然后退出。我正在寻找一种可以在连接时执行命令然后留在客户端中的方法。

(注意:我不希望更改数据库、架构或角色以使search_path 永久化,因为我发现的所有解决方案似乎都要求。我想在每次连接时设置它。但同样,这个问题可以应用任何 SQL 语句。)

我试过这个:

echo "SET search_path TO 'mything'" | psql 

但其行为方式与以下相同:

psql -c "SET search_path TO 'mything'"

我的要求可行吗?

【问题讨论】:

    标签: postgresql shell psql


    【解决方案1】:

    psql 每次启动时都会查找并执行在几个地方找到的任何命令。一个是系统范围的 psqlrc 文件,一个位于运行 psql 的登录名的主目录 ~/.psqlrc。

    因此,您可以将您一直希望运行的 SET 命令添加到您的 .psqlrc 文件中,并且每次启动时都会执行该命令。请看下面的例子:

    ~ $ cat ~/.psqlrc
    SET search_path='mything';
    ~ $ psql
    SET search_path='mything';
    SET
    psql (8.4.20, server 9.2.10)
    WARNING: psql version 8.4, server version 9.2.
         Some psql features might not work.
    Type "help" for help.
    rhnschema=# show search_path;
    search_path 
    -------------
    mything
    (1 row)
    rhnschema=# 
    

    【讨论】:

    • 欢迎来到stackoveflow。考虑为您的答案添加解释。
    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2019-11-11
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多