此条目与一个提议的PostgreSQL功能相关,该功能在公开发布之前已被撤回。
query_id_squash_values
是一个 配置参数,它决定了常量列表(例如,用于 IN
子句)如何影响查询标识符的计算。
query_id_squash_values
在 PostgreSQL 18 中添加,但随后被移除。
默认
query_id_squash_values
的默认值为:off
。
用法
如果设置为 on
,query_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)