I have only looked at 0001, but I am wondering why query_id_const_merge is a pg_stat_statements GUC rather than a core GUC?
The dependency of pg_stat_statements to take advantage of this useful feature does not seem right. For example if the user does not have pg_stat_statements enabled, but are sampling top queryId from pg_stat_activity, they will likely want this merge behavior to build meaningful database load graphs. Other extensions that consume queryIds may also want this behavior without needing to enable pg_stat_statements. Also, we have compute_query_id as a core parameter, this new guc will become an option for how to compute a queryId. In the future we may want to introduce other controls for how a queryId is generated. Regards, Sami