在PostgreSQL18中新增了不少psql的相关的新特性,说不准那个命令就可以帮助到你。我会通过几篇文章逐个的对每个psql进行测试说明,希望对大家以后得实施运维有所帮助。
元命令上使用扩展模型
在PostgreSQL18中允许在所有psql的元命令上使用扩展模式,这就允许将“x”添加到任何类似psql列表的元命令中,在输出的时候强制其以扩展模式显示,也就是可以把查询的结果行转换为列的形式展示,这中操作对于输出非常宽的情况下,可以提高显示内容的可读性。例如,“\dvx+”(或等价的“\dv+x”)将在扩展模式下生成一个视图列表,其中包含额外的详细信息。该功能适用于所有\d*元命令,加上\l、\z和\lo_list,但是有一个特殊命令,即扩展模式选项“x”不能单独附加到“\d”后面,因为“\dx”表示已经安装的扩展。
demo-# \dvx+List of views-[ RECORD 1]-------------------Schema| bookingsName| aircraftsType| viewOwner| postgresPersistence| permanentSize|0 bytesDescription|Aircrafts-[ RECORD 2]-------------------Schema| bookingsName| airportsType| viewOwner| postgresPersistence| permanentSize|0 bytesDescription|Airports
相比于之前的扩展模式的使用方式,非常的方便。唯一容易让我们忽略的就是上面提到的“\dx”。
\conninfo使用表格格式并包含更多信息
\conninfo是用于输出当前数据库连接的信息,如果使用TLS,则包括TLS相关信息。
在PostgreSQL18以前的版本来看看\conninfo的效果
demo-# \conninfoYou are connected to database "demo"as user "postgres" via socket in"/tmp" at port "5432".
该结果就是通过一段话来描述连接的信息,感觉还是不直观。
postgres=# \conninfoConnectionInformationParameter|Value----------------------+----------Database| postgresClientUser| postgresSocketDirectory|/tmpServerPort|5432Options|ProtocolVersion|3PasswordUsed|falseGSSAPI Authenticated|falseBackend PID |29333TLS Connection|falseSuperuser| onHotStandby| off(12 rows)
而在PostgreSQL18时,使用表格来展示连接信息,不仅显示的更直观明了而且新增了更多的连接到信息。特别需要提到的是,目前没有显示“角色”和“会话授权”,如果PG开发者审核通过该功能,可能在后续版本添加。
\df+,\do+,\dAo+和\dC+输出新增了函数防漏字段标识
在PostgreSQL18 psql的\df+, \do+, \dAo+和\dC+输出新增了函数防漏字段标识,用于标识特定函数是否防泄漏,以及操作符和类型转换调用的底层函数是否防泄漏,该功能对于确定在security barrier视图或行级安全策略(row-level security policies)保护的表上执行查询时能否使用索引非常有用。
postgres=# \df+List of functionsSchema|Name|Result data type |Argument data types |Type|Volatility|Parallel|Owner|Security|Leakproof?|Access privileges |Language|Internalname |Description--------+------+------------------+---------------------+------+------------+----------+-------+----------+------------+-------------------+----------+---------------+-------------(0 rows)
在输出的结果中,可以看到Leakproof?列,这个是因为psql元命令中的布尔列都是以”?“结束,这个知识点之前也没有留意到。
防泄漏相关信息参阅,官网文档 中文文档
\dP+中添加分区表的访问方法细节
在\dP+的输出中添加了分区表的访问方法字段,如果分区表或索引有设置访问方法,那么就在下该字段中显示设置的方法。在这里的访问方法就是建表语句中的USING method指定的内容,通常可以设置行存还是列存(如果有);当然如果是索引的话,可能取值就比较多了,比如btree、hash、gin等等。
create table sales(sale_id serial,product_id int,sale_date date) partition by range (sale_date);create table sales_2022 partition of sales for values from('2022-01-01') to ('2023-01-01');create table sales_2023 partition of sales for values from('2023-01-01') to ('2024-01-01');create table sales_2024 partition of sales for values from('2024-01-01') to ('2025-01-01');
执行\dP+看一下分区表的信息
testdb=# \dP+List of partitioned relationsSchema|Name|Owner|Type|Table|Access method |Total size |Description--------+-------+----------+-------------------+-------+---------------+------------+-------------public| sales | postgres | partitioned table |||0 bytes |(1 row)
在上面\dP+元命令的输出中,相比之前版本,新增了Access method字段来表示访问方法的详细的信息。
WATCH_INTERVAL设置默认的\watch等待时间
在PostgreSQL18中的psql中添加变量WATCH_INTERVAL来设置默认的\watch等待时间,当没有指定WATCH_INTERVAL变量时,\watch等待查询的默认间隔为2秒。这将添加新的变量WATCH_INTERVAL,该变量用于设置默认间隔,使用户可以对其进行配置。
在之前的版本中也可以设置间隔时长,\watch [[i=]SEC]用于指定对应的sql每N秒重新运行一次查询,如果参数i未指定,则默认值为2。在这里i参数可以省略不写,即\watch N或\watch
SELECT COUNT(*) FROM pg_stat_activity \watch 5
虽然之前的版本也可以设置,但是对于每个SQL都需要单独设置比较麻烦,因此在PostgreSQL18中使得\watch成为第一个具有用户可配置默认设置的命令。
\set WATCH_INTERVAL 10testdb=# SELECT COUNT(*) FROM pg_stat_activity \watchTue20May202503:57:36 PM CST (every 10s)count-------9(1 row)Time:0.958 msTue20May202503:57:46 PM CST (every 10s)count-------9(1 row)Time:1.423 msTue20May202503:57:56 PM CST (every 10s)
从执行的结果也可以看出是每10s执行一次上面的的语句。
如果想了解\watch的其他用法可以自行参考这篇文章PostgreSQL17允许psql的\watch在返回最小行数后停止
总结
本节先介绍PostgreSQL18新增的5个psql功能,就我个人而言,至少扩展模式和\watch还是有所帮助的。
参考
https://www.postgresql.org/docs/18/release-18.html
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=00f4c2959
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=2355e5111
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=978f38c77
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=bba2fbc62
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=1a759c832
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=1a759c832
– END / –
可以通过下面的方式联系我
微信公众号:@墨竹札记 墨天轮:@墨竹 微信:wshf395062788 IFCLUB:@墨竹 PGFans:@墨竹
如果这篇文章为你带来了灵感或启发,就请帮忙点赞、收藏、转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!





