通过shell连接时,如何在PostgreSQL中自动执行查询?

use*_*401 2 postgresql shell psql

我希望能够在连接到Postgres时自动执行语句psql,然后保持连接,以便我可以输入更多命令.

目前,每次连接时,我要做的第一件事就是输入:

SET search_path = 'something';
Run Code Online (Sandbox Code Playgroud)

或许我想做其他事情:

SELECT COUNT(*) FROM sometable;
Run Code Online (Sandbox Code Playgroud)

我知道-cpsql 会有一个参数执行命令然后退出.我正在寻找一种方法,我可以在连接时执行命令,然后保留在客户端.

(注意:我不想改变数据库,模式或角色来制作search_path永久性的,因为我发现的所有解决方案似乎都要求.我想在每次连接时设置它.但同样,这个问题可以应用任何SQL声明.)

我试过这个:

echo "SET search_path TO 'mything'" | psql 
Run Code Online (Sandbox Code Playgroud)

但行为与以下相同:

psql -c "SET search_path TO 'mything'"
Run Code Online (Sandbox Code Playgroud)

我要求的是可行的吗?

Gra*_*ney 5

每次启动时,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=# 
Run Code Online (Sandbox Code Playgroud)