在Linux环境需要以一定频率去查看一个结果的时候,我们可能会用到watch命令,例如watch -n 1 date,watch -n 1 ls这种用法,每一秒执行一次并查看其结果。
而在PostgreSQL里,我们先执行一个SQL,然后通过\watch 跟上秒数,就可以实现类似于Linux系统本身的watch命令。
postgres=# select now();
now
-------------------------------
2022-09-01 07:37:09.841115+08
(1 row)
postgres=#
postgres=# \watch 1
Thu 01 Sep 2022 07:37:17 AM CST (every 1s)
now
-------------------------------
2022-09-01 07:37:17.628895+08
(1 row)
Thu 01 Sep 2022 07:37:18 AM CST (every 1s)
now
-------------------------------
2022-09-01 07:37:18.630712+08
(1 row)
这一改动,在我们需要长时间盯着数据库中某个视图结果的时候是比较方便的,但是不得不说,在某些场景下,它着实有一点鸡肋,因为本身Linux系统带有的watch就很强大了,而且数据库新加的\watch命令只能不停执行SQL命令并不断往下刷屏,Linux本身自带的watch可以结合psql客户端的-c命令实现动态刷新结果,而不是频繁向下滚动刷屏的效果,例如执行
watch -n 1 'psql -c "select now();"'
这个结果会位于终端的上方,一直是一个刷新的状态。
而它比较好的一点也是因为这个执行刷屏的这点,因为可以查看每次的变化情况。然而,通过linux的watch也可以把每次执行的结果追加到文件里,这个时候虽然当前的这个终端不能动态查看了,但是只要我们另外开启一个终端,直接tail -f 去查看这个文件,其实和\watch的这个滚动效果是基本一样的。
但因为我是用的本地连接执行,相对于远程执行且需要输密码的情况可能确实这个\watch的更加友好和安全。因为除了第一次连接数据库需要输密码外,不会出现像使用linux的自带的watch命令结合psql的远程连接可能会让明文密码出现在服务器命令行历史记录里的问题
watch -n 1 'psql -c "select now();" >> 1.txt'