Re: Parallel safety tagging of extension functions

Поиск
Список
Период
Сортировка
От Robert Haas
Тема Re: Parallel safety tagging of extension functions
Дата
Msg-id CA+TgmoY72sxbAfH87YBwdwaFp4zuwoXBJRujUd8QO8+MPDs-qg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Parallel safety tagging of extension functions  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Parallel safety tagging of extension functions  (Andres Freund <andres@anarazel.de>)
Список pgsql-hackers
On Thu, Jun 9, 2016 at 4:48 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Robert Haas <robertmhaas@gmail.com> writes:
>> On Sat, May 21, 2016 at 11:45 AM, Tom Lane <tgl@sss.pgh.pa.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



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: Perf Benchmarking and regression.
Следующее
От: Andres Freund
Дата:
Сообщение: Re: Parallel safety tagging of extension functions