1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Make jsonpath .string() be immutable for datetimes.

Discussion of commit ed055d249 revealed that we don't actually
want jsonpath's .string() method to depend on DateStyle, nor
TimeZone either, because the non-"_tz" jsonpath functions are
supposed to be immutable.  Potentially we could allow a TimeZone
dependency in the "_tz" variants, but it seems better to just
uniformly define this method as returning the same string that
jsonb text output would do.  That's easier to implement too,
saving a couple dozen lines.

Patch by me, per complaint from Peter Eisentraut.  Back-patch
to v17 where this feature came in (in 66ea94e8e).  Also
back-patch ed055d249 to provide test cases.

Discussion: https://postgr.es/m/5e8879d0-a3c8-4be2-950f-d83aa2af953a@eisentraut.org
This commit is contained in:
Tom Lane
2024-09-12 14:30:29 -04:00
parent 4eada203a5
commit cb599b9ddf
4 changed files with 44 additions and 92 deletions

View File

@ -18017,16 +18017,15 @@ ERROR: jsonpath member accessor can only be applied to an object
</para>
<para>
String value converted from a JSON boolean, number, string, or
datetime (the output format for datetimes is determined by
the <xref linkend="guc-datestyle"/> parameter)
datetime
</para>
<para>
<literal>jsonb_path_query_array('[1.23, "xyz", false]', '$[*].string()')</literal>
<returnvalue>["1.23", "xyz", "false"]</returnvalue>
</para>
<para>
<literal>jsonb_path_query('"2023-08-15"', '$.datetime().string()')</literal>
<returnvalue>"2023-08-15"</returnvalue>
<literal>jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().string()')</literal>
<returnvalue>"2023-08-15T12:34:56"</returnvalue>
</para></entry>
</row>