From: Andres Freund <andres@anarazel.de>
To: pgsql-performance@postgresql.org
Cc: Josh Berkus <josh@agliodbs.com>
Subject: Re: STRICT SQL functions never inline
Date: Wed, 09 Nov 2011 01:25:36 +0100
Message-ID: <2035036.0LnEqdmoaV@alap2> (raw)
In-Reply-To: <4EB9BB3F.6090504@agliodbs.com>
References: <4EB9BB3F.6090504@agliodbs.com>
On Tuesday, November 08, 2011 15:29:03 Josh Berkus wrote:
> Folks,
>
> After having some production issues, I did some testing and it seems
> that any SQL function declared STRICT will never inline. As a result,
> it won't work with either indexes (on the underlying predicate) or
> partitioning.
>
> This seems like a horrible gotcha for our users. At the very least I'd
> like to document it (in CREATE FUNCTION, presumably), but it would be
> better to fix it. Thoughts?
I am all for documenting it somewhere. There were lots of people hit by it in
the past - e.g. the postgis folks.
Its not so easy to fix though. The problem is that straight inlining would
change the behaviour because suddenly the expression might not return NULL
anymore even though one of the parameters is NULL. Or even cause more problems
because the content wasn't prepared to handle NULLs.
It would be possible to inline a CASE $1 IS NULL OR $2 IS NULL .... THEN NULL
ELSE orig_expression END but that would be usefull in far fewer cases because
it won't help much in most cases and actually might hurt performance in some.
Andres
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-performance@postgresql.org
Cc: andres@anarazel.de, josh@agliodbs.com
Subject: Re: STRICT SQL functions never inline
In-Reply-To: <2035036.0LnEqdmoaV@alap2>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox