psql 快捷操作

在我的工具 postgres_dba 中,安装命令包含:

Shell
printf "%s %s %s %s\n" \\set dba \'\\\\i $(pwd)/start.psql\' >> ~/.psqlrc

这种方式可以让我们在 psql 中只需输入 :dba 即可调用 start.psql,而且该命令在 bash 和 zsh 中均有效 (macOS 几年前将默认 shell 更改为 zsh,而 bash 通常是 Linux 发行版的默认 shell)。

我们可以很容易地在 .psqlrc 中添加自己的指令,以定义各种便捷的快捷键。比如:

Shell
\set pid 'select pg_backend_pid() as pid;'
\set prim 'select not pg_is_in_recovery() as is_primary;'
\set a 'select state, count(*) from pg_stat_activity where pid <> pg_backend_pid() group by 1 order by 1;'

👉 这添加了简便的快捷方式:

  1. 当前 PID:

    PSQL
    nik=# :pid
      pid
    --------
     513553
    (1 row)
    
  2. 判断是否为主节点?

    PSQL
    nik=# :prim
     is_primary
    ------------
     t
    (1 row)
    
  3. 简单活动摘要

    PSQL
    nik=# :a
            state        | count
    ---------------------+-------
     active              |    19
     idle                |   193
     idle in transaction |     2
                         |     7
    (4 rows)
    

在 SQL 上下文中,可以使用下面这种有趣的语法,将当前设置的 psql 变量值作为字符串进行传递:

PSQL
nik=# select :'pid';
            ?column?
---------------------------------
 select pg_backend_pid() as pid;
(1 row)

在编写脚本时,不要忘了使用 -X (--no-psqlrc)选项,以确保 .psqlrc 中的内容不会影响脚本的逻辑。

讨论与补充

在 GitHub 查看讨论

支持作者

感谢支持 PostgreSQL Howto 的长期维护。

微信赞赏码

读者交流群

二维码若已过期,可通过公众号 PostgreSQL 学徒或邮件联系。

PostgreSQL 学徒读者交流群二维码