Re: SQL/JSON: functions
Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
On 7/17/20 4:26 PM, Nikita Glukhov wrote: > >>> Patch #5 implements functions for new JSON type that is expected to appear in >>> the upcoming SQL/JSON standard: >>> >>> - JSON() is for constructing JSON typed values from JSON text. >>> It is almost equivalent to text::json[b] cast, except that it has additional >>> ability to specify WITH UNIQUE KEYS constraint. >>> >>> - JSON_SCALAR() is for constructing JSON typed values from SQL scalars. >>> It is equivalent to to_json[b](). >>> >>> - JSON_SERIALIZE() is for serializing JSON typed values to character strings. >>> It is almost equivalent to json[b]::character_type cast, but it also >>> supports output to bytea. >>> >>> Upcoming Oracle 20c will have JSON datatype and these functions [1], so we >>> decided also to implement them for compatibility, despite that they do not make >>> sense for real PG users. >> Are these functions in the standard, or are they Oracle extensions? If >> the latter maybe they belong in an options extension. > The new SQL type JSON and these functions are in to the new standard SQL/JSON 2.0. > It is at the proposal stage now, but Oracle 20c has already implemented it. > > The document is not publicly available, so Oleg should have sent it to you in a > private message. > >>> Patch #6 allows the user to use PG jsonb type as an effective implementation of >>> SQL JSON type. By explicitly setting GUC sql_json = jsonb, JSON will be mapped >>> to jsonb, and JSON TEXT (may be named named differently) will be mapped to json. >>> >>> This seems to be a hack, but we failed to propose something more simpler. >> What is going to be the effect of that on things like index expressions? >> This strikes me at first glance as something of a potential footgun, but >> maybe I'm being overcautious. > This allows users of 'sql_json=jsonb' to create GIN indexes on SQL type JSON > (but such creation indexes are still not SQL standard conforming). Maybe I do > not correctly understand the question or the consequences of type name > rewriting. > > The type names are rewritten on the input at the initial parsing stage and on > the output in format_type_be(), like it is done for "timestamp with timezone" => > timestamptz, integer => int4. Internal representation of query expressions > remains the same. Affected only representation of JSON types to/from user. > I think patches 5 and 6 need to be submitted to the next commitfest, This is far too much scope creep to be snuck in under the current CF item. I'll look at patches 1-4. cheers andrew -- Andrew Dunstan https://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
JSON_TABLE: Add support for NESTED paths and columns
- bb766cde63b4 17.0 landed
-
Add basic JSON_TABLE() functionality
- de3600452b61 17.0 landed
-
Add SQL/JSON query functions
- 6185c9737cf4 17.0 landed
-
Add soft error handling to some expression nodes
- aaaf9449ec6b 17.0 landed
-
Adjust populate_record_field() to handle errors softly
- 1edb3b491bee 17.0 landed
-
Refactor code used by jsonpath executor to fetch variables
- faa2b953ba3b 17.0 landed
-
Add more SQL/JSON constructor functions
- 03734a7fed7d 17.0 landed
-
SQL/JSON: support the IS JSON predicate
- 6ee30209a6f1 16.0 landed
-
SQL/JSON: add standard JSON constructor functions
- 7081ac46ace8 16.0 landed
-
Improve readability of SQL/JSON documentation.
- b46bcf7a4b6f 15.0 landed
-
Documentation for SQL/JSON features
- a6baa4baddd5 15.0 landed
-
RETURNING clause for JSON() and JSON_SCALAR()
- 49082c2cc3d8 15.0 landed
-
SQL JSON functions
- 606948b058dc 15.0 landed
-
SQL/JSON query functions
- 1a36bc9dba8e 15.0 landed
-
IS JSON predicate
- 33a377608fc2 15.0 landed
-
SQL/JSON constructors
- f4fb45d15c59 15.0 landed
-
Common SQL/JSON clauses
- f79b803dcc98 15.0 landed
- 865fe4d5df56 15.0 landed
-
Doc: remove obsolete entries in table of BRIN strategy numbers.
- 0ce4cd04da55 14.0 cited
-
Doc: standardize markup a bit more.
- 47046763c3ed 13.0 cited
-
Make pg_regress.c unset PGDATABASE during make installcheck.
- 5ee96b3e2221 13.0 cited
-
Fix handling of GENERATED columns in CREATE TABLE LIKE INCLUDING DEFAULTS.
- b81a9c2fc525 13.0 cited