From: | Tels <nospam-pg-abuse(at)bloodgate(dot)com> |
---|---|
To: | Andreas Karlsson <andreas(at)proxel(dot)se> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Declaring a strict function returns not null / eval speed |
Date: | 2019-10-20 11:48:13 |
Message-ID: | fbdb5ba5e089fa88e641e8ba476d7216@bloodgate.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Moin,
On 2019-10-20 13:30, Andreas Karlsson wrote:
> On 10/1/19 9:38 AM, Andres Freund wrote:
>> We spend a surprising amount of time during expression evaluation to
>> reevaluate whether input to a strict function (or similar) is not
>> null, even though the value either comes from a strict function, or a
>> column declared not null.
>>
>> Now you can rightfully say that a strict function still can return
>> NULL, even when called with non-NULL input. But practically that's
>> quite rare. Most of the common byvalue type operators are strict, and
>> approximately none of those return NULL when actually called.
>>
>> That makes me wonder if it's worthwhile to invent a function property
>> declaring strict strictness or such. It'd allow for some quite
>> noticable improvements for e.g. queries aggregating a lot of rows, we
>> spend a fair time checking whether the transition value has "turned"
>> not null. I'm about to submit a patch making that less expensive, but
>> it's still expensive.
>>
>> I can also imagine that being able to propagate NOT NULL further up
>> the parse-analysis tree could be beneficial for planning, but I've not
>> looked at it in any detail.
>
> Agreed, this sounds like something useful to do since virtually all
> strict functions cannot return NULL, especially the ones which are
> used in tight loops. The main design issue seems to be to think up a
> name for this new level of strictness which is not too confusing for
> end users.
STRICT NONULL? That way you could do
CREATE FUNCTION f1 ... STRICT;
CREATE FUNCTION f2 ... STRICT NONULL;
CREATE FUNCTION f3 ... NONULL;
and the last wold throw "not implementet yet"? "NEVER RETURNS NULL"
would also ryme with the existing "RETURNS NULL ON NULL INPUT", but I
find the verbosity too high.
Best regards,
Tels
--
Best regards,
Tels
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2019-10-20 12:31:38 | Re: jsonb_set() strictness considered harmful to data |
Previous Message | Andreas Karlsson | 2019-10-20 11:30:33 | Re: Declaring a strict function returns not null / eval speed |