Tom Lane <t...@sss.pgh.pa.us> writes: > ilm...@ilmari.org (Dagfinn Ilmari =?utf-8?Q?Manns=C3=A5ker?=) writes: >> While playing around some more with the extension, I discoverered a few >> more issues: >> ... >> 4) SV_to_JsonbValue() throws an error for infinite NVs, but not NaNs > > The others sound like bugs, but that one's intentional, since type > numeric does have a concept of NaN. If you're arguing that we should > disallow that value in the context of jsonb, maybe so, but it'd likely > take changes in quite a few more places than here.
The numeric type that's used internally to represent numbers in jsonb might have the concept of NaN, but JSON itself does not: Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. - https://tools.ietf.org/html/rfc7159#section-6 And it cannot be cast to json: =# create or replace function jsonbnan() returns jsonb immutable language plperlu transform for type jsonb as '0+"NaN"'; CREATE FUNCTION =# select jsonbnan(); ┌──────────┐ │ jsonbnan │ ├──────────┤ │ NaN │ └──────────┘ =# select jsonb_typeof(jsonbnan()); ┌──────────────┐ │ jsonb_typeof │ ├──────────────┤ │ number │ └──────────────┘ =# select jsonbnan()::json; ERROR: invalid input syntax for type json DETAIL: Token "NaN" is invalid. CONTEXT: JSON data, line 1: NaN - ilmari -- "The surreality of the universe tends towards a maximum" -- Skud's Law "Never formulate a law or axiom that you're not prepared to live with the consequences of." -- Skud's Meta-Law