Re: [HACKERS] SQL/JSON in PostgreSQL - Mailing list pgsql-hackers

From Oleg Bartunov
Subject Re: [HACKERS] SQL/JSON in PostgreSQL
Date
Msg-id CAF4Au4wwTFTHWee2FM+gZD_xdpvk9wbbHsXVQLkc6chvTZsb+A@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] SQL/JSON in PostgreSQL  ("Sven R. Kunze" <srkunze@mail.de>)
List pgsql-hackers


On Wed, Mar 8, 2017 at 12:43 AM, Sven R. Kunze <srkunze@mail.de> wrote:
Hi,

about the datetime issue: as far as I know, JSON does not define a serialization format for dates and timestamps.

On the other hand, YAML (as a superset of JSON) already supports a language-independent date(time) serialization format (http://yaml.org/type/timestamp.html).

I haven't had a glance into the SQL/JSON standard yet and a quick search didn't reveal anything. However, reading your test case here https://github.com/postgrespro/sqljson/blob/5a8a241/src/test/regress/sql/sql_json.sql#L411 it seems as if you intend to parse all strings in the form of "YYYY-MM-DD" as dates. This is problematic in case a string happens to look like this but is not intended to be a date.

SQL/JSON defines methods in jsonpath, in particularly,


| datetime <left paren> [ <JSON datetime template> ] <right paren>
| keyvalue <left paren> <right paren>

<JSON datetime template> ::=
<JSON path string literal>
 
datetime template is also specified in the standard (very rich)

<datetime template> ::=
{ <datetime template part> }...
<datetime template part> ::=
<datetime template field>
| <datetime template delimiter>
<datetime template field> ::=
<datetime template year>
| <datetime template rounded year>
| <datetime template month>
| <datetime template day of month>
| <datetime template day of year>
| <datetime template 12-hour>
| <datetime template 24-hour>
| <datetime template minute>
| <datetime template second of minute>
| <datetime template second of day>
| <datetime template fraction>
| <datetime template am/pm>
| <datetime template time zone hour>
| <datetime template time zone minute>
<datetime template delimiter> ::=
<minus sign>
| <period>
| <solidus>
| <comma>
| <apostrophe>
| <semicolon>
| <colon>
| <space>
<datetime template year> ::=
YYYY | YYY | YY | Y
<datetime template rounded year> ::=
RRRR | RR
<datetime template month> ::=
MM
<datetime template day of month> ::=
DD
<datetime template day of year> ::=
DDD
<datetime template 12-hour> ::=
HH | HH12
<datetime template 24-hour> ::=
HH24
<datetime template minute> ::=
MI
<datetime template second of minute> ::=
SS
<datetime template second of day> ::=
SSSSS
<datetime template fraction> ::=
FF1 | FF2 | FF3 | FF4 | FF5 | FF6 | FF7 | FF8 | FF9
<datetime template am/pm> ::=
A.M. | P.M.
<datetime template time zone hour> ::=
TZH
<datetime template time zone minute> ::=
TZM



Just for the sake of completeness: YAML solves this issue by omitting the quotation marks around the date string (just as JSON integers have no quotations marks around them).

interesting idea, but need to dig the standard first.
 

Regards,
Sven

pgsql-hackers by date:

Previous
From: Andrew Gierth
Date:
Subject: Re: [HACKERS] Hash support for grouping sets
Next
From: Robert Haas
Date:
Subject: Re: [HACKERS] Patch: Write Amplification Reduction Method (WARM)