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

How do I execute a query automatically in PostgreSQL when connecting via shell?

我希望能够在使用 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'"

我要求的是可行的吗?

psql 每次启动时都会在几个地方查找并执行在其中找到的任何命令。一个是系统范围的 psqlrc 文件,一个是 运行ning 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=#