Обсуждение: 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

От
PG Bug reporting form
Дата:
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;


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