Re: Why does jsonb_set() remove non-mentioned keys? - Mailing list pgsql-general

From Gianni Ceccarelli
Subject Re: Why does jsonb_set() remove non-mentioned keys?
Date
Msg-id 20190705090047.41600de5@nautilus
Whole thread Raw
In response to Re: Why does jsonb_set() remove non-mentioned keys?  ("David G. Johnston" <david.g.johnston@gmail.com>)
Responses Re: Why does jsonb_set() remove non-mentioned keys?
List pgsql-general
Aha! I had mis-understood how "strict"-ness works.

Thank you David for the explanation!

Thomas: the two main pieces are these:

> SQL null and json null are represented differently

As far as SQL is concerned, `'null'::jsonb` is a valid (non-`NULL`)
value. The SQL part of Postgres doesn't "look inside" the jsonb value,
the same way it doesn't "look inside" numbers or strings or
whatever. It only cares if they're `NULL` or not, and then it passes
them to functions and operators (ok, it does look at boolean values
for `WHERE` clauses, but even `ORDER BY` is handled by comparison
operators)

> strict functions with sql null inputs yield sql null output without
> even executing the function

So when the SQL-level executor sees a call to any function declared
strict with some NULL parameters, it doesn't call the function at
all. `whatever_my_function('a string',1234,NULL)` is always `NULL`

-- 
    Dakkar - <Mobilis in mobile>
    GPG public key fingerprint = A071 E618 DD2C 5901 9574
                                 6FE2 40EA 9883 7519 3F88
                        key id = 0x75193F88



pgsql-general by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: Converting to identity columns with domains on PK columns
Next
From: AYahorau@ibagroup.eu
Date:
Subject: Re: Active connections are terminated because of small wal_sender_timeout