Re: REVIEW: Extensions support for pg_dump - Mailing list pgsql-hackers

From Dimitri Fontaine
Subject Re: REVIEW: Extensions support for pg_dump
Date
Msg-id 87bp3ey1gs.fsf@hi-media-techno.com
Whole thread Raw
In response to Re: REVIEW: Extensions support for pg_dump  (Anssi Kääriäinen <anssi.kaariainen@thl.fi>)
Responses Re: REVIEW: Extensions support for pg_dump  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-hackers
Anssi Kääriäinen <anssi.kaariainen@thl.fi> writes:
> Is this supposed to be used mainly by contrib and PGXN extensions? When I
> saw the documentation, I immediately thought that this is a nice way to
> package my application's stored procedures. If this is not one of the
> intended usages, it should be documented. I can see that this could be
> problematic when updating PostgreSQL and when recovering from backups.

Sure, private application's stored procedure are meant to be fully
supported by the extension's facility.

> When recovering from backup, you need to have the locally created extension
> available. But it might be that the extension files are lost when the system
> went down in flames. Now, the backup is unusable (right?) until extension
> files can be recovered from source control or where ever they might be
> stored. This is why I suggested having multiple locations for the
> extensions. It would be easy to backup locally created extensions if those
> were in a single directory. All in all, I have a nervous feeling that
> somebody someday will have an unusable dump because they used this feature,
> but do not have the extension files available...

Well, as said in the documentation, extensions are to be used for
objects you are *not* maintaining in your database, but elsewhere.
Typically you are maintaining your stored procedure code in some VCS,
and you have some "packaging" (cat *.sql > my-ext.sql in the Makefile
would be the simpler to imagine).

So yes if you tell PostgreSQL that your procedures are managed elsewhere
so that their code won't be part of your dumps, and then fail to manage
them anywhere else, you're hosed.

My viewpoint here is that when you want to use extensions, you want to
package them for your OS of choice (mine is debian, and I've been
working on easing things on this side too with pg_buildext to be found
in the postgresql-server-dev-all package).  If you're an occasional user
just wanting to use new shining facilities… well, think twice…

> Also, this part of documentation:
>
> The goal of using extensions is so that <application>pg_dump</> knows
> not to dump all the object definitions into your backups, but rather
> issue a single <xref linkend="SQL-CREATEEXTENSION"> command.

So maybe we want to extend this little sentence to add the warnings
around it, that if you're not packaging your extension's delivery to
your servers, you're likely shooting yourself in the foot?

> From that, it is not entirely clear to me why this is actually wanted in
> PostgreSQL. I suppose this will make dump/restore easier to use. But from
> that paragraph, I get the feeling the only advantage is that your dump will
> be smaller. And I still have a feeling this implements more. Not that it is
> a bad thing at all.

Well try to upgrade from 8.4 to 9.0 with some "extensions" installed in
there and used in your tables.  Pick any contrib, such as hstore or
ltree or cube, or some external code, such as ip4r or prefix or such.
Then compare to upgrade with the extension facility, and tell me what's
best :)

Hint: the dump contains the extension's script, but does not contain the shared object file.  If you're upgrading the
OSand the contribs, as you often do when upgrading major versions, you're hosed.  You would think that pg_upgrade
alleviatethe concerns here, but you still have to upgrade manually the extension's .so. 
 All in all, those extensions (contribs, ip4r, etc) are *not* maintained in your database and pretending they are by
puttingtheir scripts in your dumps is only building problems.  This patch aims to offer a solution here. 

>> It used to work this way with \i, obviously.  Should the extension patch
>> care about that and how?  Do we want to RESET search_path or to manually
>> manage it like we do for the client_min_messages and log_min_messages?
> It was unintuitive to me to have search_path changed by SQL command as a
> side effect. When using \i, not so much.

Agreed.  Will code the manual management way (that is already used for
log settings) later today, unless told to see RESET and how to do that
at the statement level rather than the transaction one.

> It is easy for me to continue from the Git repo. I will next continue doing
> the pg_dump part of the review. I hope I have time to complete that today.

Excellent, will try to continue following your pace :)

Regards,
--
Dimitri Fontaine
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support


pgsql-hackers by date:

Previous
From: Fujii Masao
Date:
Subject: Re: Replication logging
Next
From: Cédric Villemain
Date:
Subject: Re: Spread checkpoint sync