PostgreSQL 18中ANALYZE语句的*参数具体作用是什么?
PostgreSQL 18中ANALYZE语法新增的
*参数解析 根据PostgreSQL 18的ANALYZE官方文档,其table_and_columns语法定义为:
[ ONLY ] table_name [ * ] [ ( column_name [, ...] ) ]
这个紧跟在表名后的可选*参数是PostgreSQL 18新增的,在PostgreSQL 17及更早版本的ANALYZE语法中不存在,且目前官方文档未明确说明它的作用。
结合PostgreSQL的语法设计惯例可以推断:这个*的作用是递归分析目标表及其所有继承子表,而非单纯表示“所有列”。
PostgreSQL中很多涉及表对象的命令都遵循类似语法逻辑:
- 使用
ONLY table_name时,仅操作当前表本身,不包含其继承子表 - 使用
table_name*时,会递归操作该表及其所有继承子表 - 不指定
ONLY或*时,默认行为和ONLY table_name一致(仅操作当前表)
对应到ANALYZE命令上:
ANALYZE table_name:仅分析当前表的所有列,不包含继承子表ANALYZE table_name*:分析当前表及其所有继承子表的所有列ANALYZE table_name* (col1, col2):分析当前表及其所有继承子表的指定列
这就解释了为什么它和“省略列名”不重复——省略列名是控制分析的列范围,而*是控制是否包含继承子表,二者是不同维度的语法参数。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

