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
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. |