PG-2116 Truncate query strings at multi-byte character boundaries

Make sure we never create broken encodings in query strings by making
the truncation of query strings multi-byte aware. An alternative would
be to change the rule for truncation to be based on number of
characters, as the documentation claims it is, but I do not think that
would be significantly better. Either works just fine so we just pick
one.

Based on bug report from Ivan Vyazmitinov:

https://github.com/percona/pg_stat_monitor/issues/599
This commit is contained in:
Andreas Karlsson
2025-12-23 17:10:27 +01:00
committed by Andreas Karlsson
parent fef78a8f6f
commit 5526e413c1
3 changed files with 22 additions and 1 deletions

View File

@@ -17,6 +17,19 @@ SELECT pg_stat_monitor_reset();
(1 row)
SELECT length('åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå');
length
--------
512
(1 row)
SELECT length(query), query FROM pg_stat_monitor ORDER BY query;
length | query
--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
519 | SELECT length('åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå
30 | SELECT pg_stat_monitor_reset()
(2 rows)
SELECT name, setting, unit, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, pending_restart FROM pg_settings WHERE name='pg_stat_monitor.pgsm_query_max_len';
name | setting | unit | context | vartype | source | min_val | max_val | enumvals | boot_val | reset_val | pending_restart
------------------------------------+---------+------+------------+---------+--------------------+---------+------------+----------+----------+-----------+-----------------