Обсуждение: Allow relocatable extension to use @extschema@?

Поиск
Список
Период
Сортировка

Allow relocatable extension to use @extschema@?

От
Alexander Korotkov
Дата:
Hi!

During work on knn-btree patchset we've faced the need to move
functions/operators from contrib to core [1].  In the extension
upgrade script we need to use @extschema@ in order to distinguish
contrib and core objects.  However, it appears to be possible to use
@extschema@ only in non-relocatable extensions.  Comment in
extension.c says: "For a relocatable extension, we needn't do this.
There cannot be any need for @extschema@, else it wouldn't be
relocatable.".  I've explored that we've marked extension as
non-relocatable solely to use @extschema@ in script before [2].

So, it appears that comment in extension.c isn't true.  There is at
least two precedents when relocatable extension needs to use
@extschema@.  We've marked possibly relocatable extension as
non-relocatable once.  And we could do it at the second time.
Extension relocatability doesn't seem to me much value to sacrifice.
But nevertheless should we allow relocatable extension to use
@extschema@.  Any thoughts?

Links.
1. https://www.postgresql.org/message-id/CAPpHfdsWsb9T1eHdX%2Br7wnXbGJKQxSffc8gTGp4ZA2ewP49Hog%40mail.gmail.com
2.
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=de623f33353c96657651f9c3a6c8756616c610e4;hp=0024e348989254d48dc4afe9beab98a6994a791e

------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company



Re: Allow relocatable extension to use @extschema@?

От
Tom Lane
Дата:
Alexander Korotkov <a.korotkov@postgrespro.ru> writes:
> But nevertheless should we allow relocatable extension to use
> @extschema@.  Any thoughts?

No.  The reasoning in the comment still holds good: if you embed
@extschema@ in an object's definition, it becomes nonrelocatable.

            regards, tom lane



Re: Allow relocatable extension to use @extschema@?

От
Alexander Korotkov
Дата:
On Tue, Dec 3, 2019 at 6:18 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Alexander Korotkov <a.korotkov@postgrespro.ru> writes:
> > But nevertheless should we allow relocatable extension to use
> > @extschema@.  Any thoughts?
>
> No.  The reasoning in the comment still holds good: if you embed
> @extschema@ in an object's definition, it becomes nonrelocatable.

I see, allowing @extschema@ in non-relocatable extension provides easy
way to shoot yourself in the foot.

However, it might be still useful to be able to distinguish extension
and core object in upgrade script of relocatable extensions.  What
about (optional) way to set search_path to @extschema@, pg_catalog
instead of just @extschema@?

------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company



Re: Allow relocatable extension to use @extschema@?

От
Robert Haas
Дата:
On Tue, Dec 3, 2019 at 10:18 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Alexander Korotkov <a.korotkov@postgrespro.ru> writes:
> > But nevertheless should we allow relocatable extension to use
> > @extschema@.  Any thoughts?
>
> No.  The reasoning in the comment still holds good: if you embed
> @extschema@ in an object's definition, it becomes nonrelocatable.

That's demonstrably false, and the links included in the OP prove it.

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



Re: Allow relocatable extension to use @extschema@?

От
Noah Misch
Дата:
On Thu, Dec 05, 2019 at 09:52:50AM -0500, Robert Haas wrote:
> On Tue, Dec 3, 2019 at 10:18 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > Alexander Korotkov <a.korotkov@postgrespro.ru> writes:
> > > But nevertheless should we allow relocatable extension to use
> > > @extschema@.  Any thoughts?
> >
> > No.  The reasoning in the comment still holds good: if you embed
> > @extschema@ in an object's definition, it becomes nonrelocatable.
> 
> That's demonstrably false, and the links included in the OP prove it.

Right.  Or, to add further precision, embedding @extschema@ persistently in
the system catalogs does make the extension nonrelocatable.  The OP examples
merely embed @extschema@ in extension scripts, and they don't impair
relocation.  I'm okay with the proposal, but I still wouldn't mind deprecating
relocatable=true.