当前位置: 首页 > article >正文

PostgreSQL17允许psql的\watch在返回最小行数后停止

PostgreSQL17允许psql的\watch在返回最小行数后停止

今天看看PostgreSQL17对psql中 \watch的优化改进。在psql中使用\watch运行重复查询时,当查询不再返回预期的行数时,可以停止监控进程,例如,监视pg_stat_activity中某个事件的存在并在该事件不再存在时停止。在PostgreSQL17版本中,为\watch添加min_rows=MIN参数,该参数可以设置为非负整数,并且当返回的行数少于MIN时,watch查询将停止执行。在这里min_rows可以简写为n,后面也将验证。

psql中\watch参数说明

\watch [[i=]SEC] [c=N] [m=MIN]
                         execute query every SEC seconds, up to N times,
                         stop if less than MIN rows are returned
--每SEC执行一次查询,最多N次,如果返回的行数少于MIN则停止

\watch每隔多久执行一次

\watch [[i=]SEC]用于指定对应的sql每N秒重新运行一次查询,如果参数I未指定,则默认值为2。在这里i参数可以省略不写,即\watch N或\watch

testdb=# SELECT COUNT(*) FROM pg_stat_activity \watch 1
Tue 30 Jul 2024 03:59:57 PM CST (every 1s)

 count 
-------
     6
(1 row)

Tue 30 Jul 2024 03:59:58 PM CST (every 1s)

 count 
-------
     6
(1 row)

Tue 30 Jul 2024 03:59:59 PM CST (every 1s)

 count 
-------
     6
(1 row)

在指定\watch 1命令后,执行SELECT COUNT(*) FROM pg_stat_activity语句,然后休眠1s后再重复执行该SQL。

\watch 最多执行几次

当我们指定c=2时,在执行2次后就停止执行了。

testdb=# SELECT COUNT(*) FROM pg_stat_activity \watch 1 c=2
Tue 30 Jul 2024 04:21:20 PM CST (every 1s)

 count 
-------
     6
(1 row)

Tue 30 Jul 2024 04:21:21 PM CST (every 1s)

 count 
-------
     6
(1 row)

testdb=# 

\watch 指定返回最小行数后停止–新功能

在监控数据库时运行情况时,比如监控正在运行的SQL或锁时,这个是相当有用。

我们先在本地打开两个客户端分别psql连接数据库,然后在其中一个客户端上,执行下面的查询语句

testdb=# SELECT pid FROM pg_stat_activity WHERE backend_type = 'client backend' \watch m=2
Tue 30 Jul 2024 04:10:51 PM CST (every 2s)

  pid  
-------
 11367
 11626
(2 rows)

Tue 30 Jul 2024 04:10:53 PM CST (every 2s)

  pid  
-------
 11367
 11626
(2 rows)

在第二个客户端窗口中执行\q或者关闭客户端也可以

Tue 30 Jul 2024 04:13:51 PM CST (every 2s)

  pid  
-------
 11367
 11626
(2 rows)

Tue 30 Jul 2024 04:13:53 PM CST (every 2s)

  pid  
-------
 11367
(1 row)

当我们关闭第二个窗口时,可以看到第一个客户端页面,当查询返回的行数为1,小于了指定的条件2,因此就终止了该查询。

验证m为min_rows的简写

在官方的邮件中,我们看到的介绍是为\watch添加min_rows=MIN参数,但是psql的帮助界面显示参数语法为m,出于严谨的态度,我们顺便也验证看一下,m是否为min_rows的简写?

testdb=# SELECT pid FROM pg_stat_activity WHERE backend_type = 'client backend' \watch min_rows=2
Tue 30 Jul 2024 04:33:57 PM CST (every 2s)

  pid  
-------
 11367
 11933
(2 rows)

当把参数由m=2替换为min_rows=2,可以正常执行且执行的效果是一样的,也就说明了m=2是min_rows=的简写

总结

到此,我们就把\watch命令的功能都验证了,在执行的SQL后面添加\watch命令,可以指定该SQL多久执行一次查询,最多N次,如果返回的行数少于MIN则停止


http://www.kler.cn/a/590808.html

相关文章:

  • 2025年3月19日 十二生肖 今日运势
  • 电子硬件入门(三)——偏置电路
  • 模型评估——acc、P、R、F值、交叉验证、K折交叉验证
  • PATB1113 钱串子的加法
  • C++ 友元 / friend关键字解读
  • MongoDB 只能存储能够序列化的数据(比如字符串、数字等),而 Python 的 UUID 对象并不是直接可以存入数据库的格式。
  • Centos7更换仓库源为阿里云镜像
  • Hyperlane:Rust 生态中的轻量级高性能 HTTP 服务器库,助力现代 Web 开发
  • 力扣题目汇总 使用贪心算法解决问题
  • 热更新解决方案5——toLua
  • TCP 客户端 - 服务器通信程序搭建
  • ora-600 ktugct: corruption detected---惜分飞
  • 晶艺代理,100V3.5A高耐压LA1823完全替换MP9487--启烨科技有限公司
  • 每天五分钟深度学习框架pytorch:基于pytorch搭建循环神经网络RNN
  • 【大模型基础_毛玉仁】3.1 Prompt 工程简介
  • 清晰易懂的Node.js安装教程
  • 【Git学习笔记】Git分支管理策略及其结构原理分析
  • 操作系统的心脏节拍:CPU中断如何驱动内核运转?
  • Conda 环境迁移指南
  • dataframe数据形式操作中的diff和shift函数区别与对比