query_id_squash_values

一个 GUC 参数,用于指定常量列表如何影响查询标识符
此条目与一个提议的PostgreSQL功能相关,该功能在公开发布之前已被撤回。

query_id_squash_values 是一个 配置参数,它决定了常量列表(例如,用于 IN 子句)如何影响查询标识符的计算。

query_id_squash_valuesPostgreSQL 18 中添加,但随后被移除。

默认

query_id_squash_values 的默认值为:off

用法

如果设置为 onquery_id_squash_values 会导致常量列表在计算查询标识符时,无论长度如何都被视为相同,这意味着例如以下查询被视为相同:

SELECT * FROM foo WHERE id IN (1,2,3);
SELECT * FROM foo WHERE id IN (1,2,3,4,5);

请注意,这不适用于绑定参数。

变更历史

示例

query_id_squash_values 设置为 off(默认值)时,以下查询被视为不同:

postgres=# SELECT * FROM foo WHERE id IN (1,2,3);
 id 
----
(0 rows)

postgres=# SELECT * FROM foo WHERE id IN (1,2,3,4,5);
 id 
----
(0 rows)

postgres=# SELECT queryid, query FROM pg_stat_statements WHERE query LIKE '%FROM foo%';
       queryid        |                     query                      
----------------------+------------------------------------------------
 -5403584481476862985 | SELECT * FROM foo WHERE id IN ($1,$2,$3)
  -429646048165503503 | SELECT * FROM foo WHERE id IN ($1,$2,$3,$4,$5)
(2 rows)

将其设置为 on 会导致后续的这些查询被压缩成语义上等价的表示形式。

postgres=# SET query_id_squash_values TO on;
SET
postgres=# SELECT * FROM foo WHERE id IN (1,2,3); id ---- (0 rows) postgres=# SELECT * FROM foo WHERE id IN (1,2,3,4,5); id ---- (0 rows) postgres=# SELECT queryid, query FROM pg_stat_statements WHERE query LIKE '%FROM foo%'; queryid | query ----------------------+------------------------------------------------ 2785717595501395200 | SELECT * FROM foo WHERE id IN ($1 /*, ... */) -5403584481476862985 | SELECT * FROM foo WHERE id IN ($1,$2,$3) -429646048165503503 | SELECT * FROM foo WHERE id IN ($1,$2,$3,$4,$5) (3 rows)

 

分类

GUC 配置项, 已撤销

另请参阅

compute_query_id, pg_stat_statements

反馈

提交任何关于 "query_id_squash_values" 的评论、建议或更正请 在此