pgsql: Change type "char"'s I/O format for non-ASCII characters.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Change type "char"'s I/O format for non-ASCII characters.
Дата
Msg-id E1oIsu3-002Pg1-NP@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Change type "char"'s I/O format for non-ASCII characters.

Previously, a byte with the high bit set was just transmitted
as-is by charin() and charout().  This is problematic if the
database encoding is multibyte, because the result of charout()
won't be validly encoded, which breaks various stuff that
expects all text strings to be validly encoded.  We've
previously decided to enforce encoding validity rather than try
to individually harden each place that might have a problem with
such strings, so it's time to do something about "char".

To fix, represent high-bit-set characters as \ooo (backslash
and three octal digits), following the ancient "escape" format
for bytea.  charin() will continue to accept the old way as well,
though that is only reachable in single-byte encodings.

Add some test cases just so there is coverage for this code.
We'll otherwise leave this question undocumented as it was before,
because we don't really want to encourage end-user use of "char".

For the moment, back-patch into v15 so that this change appears
in 15beta3.  If there's not great pushback we should consider
absorbing this change into the older branches.

Discussion: https://postgr.es/m/2318797.1638558730@sss.pgh.pa.us

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/c034b629cc6f44099c9f54f3f0b3f4340e02d9bc

Modified Files
--------------
doc/src/sgml/datatype.sgml           | 10 +++--
src/backend/utils/adt/char.c         | 72 ++++++++++++++++++++++++++++--------
src/test/regress/expected/char.out   | 63 ++++++++++++++++++++++++++++++-
src/test/regress/expected/char_1.out | 63 ++++++++++++++++++++++++++++++-
src/test/regress/expected/char_2.out | 63 ++++++++++++++++++++++++++++++-
src/test/regress/sql/char.sql        | 20 +++++++++-
6 files changed, 263 insertions(+), 28 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Improve performance of ORDER BY / DISTINCT aggregates
Следующее
От: David Rowley
Дата:
Сообщение: pgsql: Remove unused fields from ExprEvalStep