psql 快捷操作
在我的工具 postgres_dba 中,安装命令包含:
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 中添加自己的指令,以定义各种便捷的快捷键。比如:
\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;'
👉 这添加了简便的快捷方式:
当前 PID:
nik=# :pid pid -------- 513553 (1 row)判断是否为主节点?
nik=# :prim is_primary ------------ t (1 row)简单活动摘要
nik=# :a state | count ---------------------+------- active | 19 idle | 193 idle in transaction | 2 | 7 (4 rows)
在 SQL 上下文中,可以使用下面这种有趣的语法,将当前设置的 psql 变量值作为字符串进行传递:
nik=# select :'pid';
?column?
---------------------------------
select pg_backend_pid() as pid;
(1 row)
在编写脚本时,不要忘了使用 -X (--no-psqlrc)选项,以确保 .psqlrc 中的内容不会影响脚本的逻辑。