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