Thread: BUG #16092: json[b]_to_recordset and json[b]_populate_record do not read properties with mixed-case names
BUG #16092: json[b]_to_recordset and json[b]_populate_record do not read properties with mixed-case names
From
PG Bug reporting form
Date:
The following bug has been logged on the website: Bug reference: 16092 Logged by: Dirk Weinhardt Email address: dweinhardt78+pgsql-bugs@gmail.com PostgreSQL version: 11.5 Operating system: Alpine Linux Description: Using Docker container image postgres:11.5-alpine pulled on 2019-10-31 14:12:00 CET. Given this fairly simple piece of JSON data: [{"aName": "foo"}] When any of these queries is executed: SELECT x.* FROM jsonb_to_recordset('[{"aName": "foo"}]'::jsonb) AS x(aName text); SELECT x.* FROM json_to_recordset('[{"aName": "foo"}]'::json) AS x(aName text); SELECT x.* FROM jsonb_to_recordset('[{"aname": "foo"}]'::jsonb) AS x(aname text); SELECT x.* FROM json_to_recordset('[{"aname": "foo"}]'::json) AS x(aname text); Then the output should be: aname (text) ----------------- foo But for the first and the second query (the ones with mixed-case property names) the actual output is: aname (text) ----------------- NULL The same issue also exists with these queries: DROP TYPE IF EXISTS x; CREATE TYPE x AS (aName text); SELECT x.* FROM jsonb_array_elements('[{"aName": "foo"}]'::jsonb) AS s, jsonb_populate_record(NULL::x, s.value) AS x; SELECT x.* FROM json_array_elements('[{"aName": "foo"}]'::json) AS s, json_populate_record(NULL::x, s.value) AS x;
Re: BUG #16092: json[b]_to_recordset and json[b]_populate_record do not read properties with mixed-case names
From
Sergei Kornilov
Date:
Hello Its correct. Identifier name definition should be quoted if you want use uppercase symbols: SELECT x.* FROM jsonb_to_recordset('[{"aName": "foo"}]'::jsonb) AS x("aName" text); aName ------- foo unquoted names are always folded to lower case and therefore do not match. Per lexical structure documentation: https://www.postgresql.org/docs/current/sql-syntax-lexical.html regards, Sergei