Re: Parallel safety tagging of extension functions

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, Andreas Karlsson <andreas(at)proxel(dot)se>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Parallel safety tagging of extension functions
Date: 2016-06-09 21:40:24
Message-ID: CA+TgmoY72sxbAfH87YBwdwaFp4zuwoXBJRujUd8QO8+MPDs-qg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Jun 9, 2016 at 4:48 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Robert Haas <robertmhaas(at)gmail(dot)com> writes:
>> On Sat, May 21, 2016 at 11:45 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>>> Yes, let's fix it. This will also take care of the questions about
>>> whether the GIN/GIST opclass tweaks I made a few months ago require
>>> module version bumps.
>
>> Tom, there's a patch for this at
>> https://www.postgresql.org/message-id/574F091A.3050800@proxel.se which
>> I think you should review, since you were the one who made the tweaks
>> involved. Any chance you can do that RSN?
>
> I've pushed this with some revisions to make the queries more
> search-path-safe. I'm not too happy with the safety of the queries
> I see already present from the previous patches. I think stuff
> like this:
>
> UPDATE pg_proc SET proparallel = 's'
> WHERE oid = 'min(citext)'::regprocedure;
>
> needs to be more like
>
> UPDATE pg_catalog.pg_proc SET proparallel = 's'
> WHERE oid = 'min(citext)'::pg_catalog.regprocedure;

We could do that, but there's no guarantee that "min" or "citext"
resolve correctly either, is there? Basically, the search-path-safety
of many of the scripts already in contrib looks pretty horrendous to
me. For example:

CREATE VIEW pg_buffercache AS
SELECT P.* FROM pg_buffercache_pages() AS P
(bufferid integer, relfilenode oid, reltablespace oid, reldatabase oid,
relforknumber int2, relblocknumber int8, isdirty bool, usagecount int2,
pinning_backends int4);

Well, what guarantee have we that we'll get the right
pg_buffercache_pages() function?

CREATE FUNCTION earth() RETURNS float8
LANGUAGE SQL IMMUTABLE PARALLEL SAFE
AS 'SELECT ''6378168''::float8';

What guarantees we'll get the correct float8 type?

CREATE FUNCTION sec_to_gc(float8)
RETURNS float8
LANGUAGE SQL
IMMUTABLE STRICT
PARALLEL SAFE
AS 'SELECT CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/(2*earth()) > 1
THEN pi()*earth() ELSE 2*earth()*asin($1/(2*earth())) END';

Don't even get me started.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2016-06-09 21:45:50 Re: Parallel safety tagging of extension functions
Previous Message Andres Freund 2016-06-09 21:37:31 Re: Perf Benchmarking and regression.