I found a case where Numeric goes up to 50K and is not omitted. As per
doc([1]), numeric can go up to 131072 digits , which means it can
easily go beyond 16k limit.  See the test attached. I think
JSONTYPE_NUMERIC in datum_to_json_internal() also needs the fix.
Attached the patch for potential fix. It applies on top of
0001-reentrant-json-fix.patch shared in previous email.

[1]: https://www.postgresql.org/docs/19/datatype-numeric.html

thanks
Shveta
Pub, Sub:
CREATE TABLE conf_tab_numeric_big (a int PRIMARY KEY, b numeric);

Pub:
INSERT INTO conf_tab_numeric_big VALUES (1, 1e15000::numeric);

Sub:
DELETE FROM conf_tab_numeric_big WHERE a = 1;

Pub:
UPDATE conf_tab_numeric_big SET b = 1e50000::numeric WHERE a = 1;

Seee the length:
postgres=# SELECT length(remote_tuple->>'b') from 
pg_conflict.pg_conflict_log_16400 where relname = 'conf_tab_numeric_big';
 length 
--------
  50001

It is not omitted and logged fully in CLT.

Attachment: 0001-json-numeric-fix.patch
Description: Binary data

Reply via email to