| From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
|---|---|
| To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Cc: | venu2805k(at)gmail(dot)com |
| Subject: | BUG #19768: JSON_TABLE: row/text comparisons in context item or PASSING give wrong results or spurious collation |
| Date: | 2026-10-16 22:51:01 |
| Message-ID: | 19768-3633daa830be95db@postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 19768
Logged by: Venu Kummari
Email address: venu2805k(at)gmail(dot)com
PostgreSQL version: 18.6
Operating system: Linux x86_64
Description:
PostgreSQL versions: 17.11, 18.6, master (26bd08f). Tested from source on
Linux x86_64.
The JSON_TABLE context-item expression fails to assign collations correctly,
causing incorrect results for row comparisons and collation errors for valid
text comparisons.
1. Incorrect result / assertion failure:
SELECT * FROM JSON_TABLE(
jsonb_build_object('k', ROW(1, 2) < ROW(3, 4)),
'$'
COLUMNS (a bool PATH '$.k')
);
Expected: t
Actual: f on PostgreSQL 17.11 and 18.6. On an assertion-enabled master
build, the backend fails with:
TRAP: failed Assert("list_length(rcexpr->inputcollids) == nopers"), File:
"execExpr.c", Line: 2078
2. Collation error in the context item:
SELECT * FROM JSON_TABLE(
jsonb_build_object('k', 'a' < 'b' COLLATE "C"),
'$'
COLUMNS (a bool PATH '$.k')
);
Expected: t
Actual: ERROR: could not determine which collation to use for string
comparison
3. Collation error in a PASSING argument:
SELECT * FROM JSON_TABLE(
jsonb '{}',
'$' PASSING 'a' < 'b' COLLATE "C" AS x
COLUMNS (a bool PATH '$x')
);
This also fails with "could not determine which collation to use for string
comparison", despite the explicit COLLATE clause.
The same expressions work outside JSON_TABLE.
Suspected cause: transformJsonTable() in
src/backend/parser/parse_jsontable.c does not call assign_expr_collations()
for the context-item expression and PASSING arguments. The corresponding
XMLTABLE transformation performs collation assignment, as do JSON_TABLE
column expressions.
Without the required collation information, a RowCompareExpr can have an
empty inputcollids list, causing the executor to compare zero columns and
return an incorrect result.
A proposed patch adds the missing collation assignment and regression tests.
The patch was tested on master, and the core regression suite passed
(239/239 tests). The source change applies to REL_17_STABLE and
REL_18_STABLE.
The bug was discovered through grammar-based fuzzing.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Venu K | 2026-10-16 23:06:13 | Re: BUG #19768: JSON_TABLE: row/text comparisons in context item or PASSING give wrong results or spurious collation |
| Previous Message | Dmitry Dolgov | 2026-10-16 20:41:27 | Re: BUG #19736: `JSON_OBJECT ... ABSENT ON NULL` accepts invalid keys when the value is NULL |