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

devtools/2025/3/20 3:02:42/

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

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

psqlwatch_4">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  
-------1136711626
(2 rows)Tue 30 Jul 2024 04:10:53 PM CST (every 2s)pid  
-------1136711626
(2 rows)

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

Tue 30 Jul 2024 04:13:51 PM CST (every 2s)pid  
-------1136711626
(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  
-------1136711933
(2 rows)

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

总结

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


http://www.ppmy.cn/devtools/168513.html

相关文章

Spring Boot 启动顺序

Spring Boot 启动顺序主要涉及多个关键步骤,涵盖 SpringApplication 初始化、环境准备、应用上下文创建,以及 运行阶段。以下是详细的启动顺序解析: 1. 启动引导(Bootstrap) 入口:SpringApplication.run()…

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…

手机蓝牙项目

一.蓝牙模块连接 首先将蓝牙模块与ch340模块连接然后打开串口软件调号参数。之后发送指令AT看是否有回复OK,有则连接成功,无说明串口没有连接好。 二.修改波特率 连接没有问题去查看波特率,然后修改波特率为我们串口代码写的,波…

YOLOv11小白的进击之路(九)创新YOLO11损失函数之NWD损失函数源码解读

之前的博客也有对YOLO11的损失函数进行过源码分析,可以参考:YOLOv11小白的进击之路(六)创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数,这里对其…

【课堂笔记】定理:样本越多,测量的经验损失越接近真实损失

定理描述 给定一个模型 f : X → Y f:X \to Y f:X→Y,设数据分布 D \mathcal{D} D定义在 X Y X \times Y XY,表示数据真实分布,且假设训练集和测试集的样本均从 D \mathcal{D} D中独立同分布(i.i.d)抽取。   设损失函数为 l : Y Y → R l…

Go红队开发—日志打印优化

文章目录 日志log输出打印日志控制测试源码 slog输出打印修改默认等级修改输出目的自定义logger添加日志细节子logger 日志颜色修改源码 各位师傅exp与poc编写暂时鸽了,感觉web编程那章节学完自己就能编写,想不出有什么能够学习的地方,因为po…

[网络][tcp协议]:tcp报头

tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议 本文主要介绍tcp报头各个字段的含义与用途 注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说 最简单的…

算法刷题记录——LeetCode篇(6) [第501~600题](持续更新)

(优先整理热门100及面试150,不定期持续更新,欢迎关注) 543. 二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路…