此条目与一个提议的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)
