Re: Extension Templates S03E11 - Mailing list pgsql-hackers
| From | Dimitri Fontaine |
|---|---|
| Subject | Re: Extension Templates S03E11 |
| Date | |
| Msg-id | m21u1xzh9g.fsf@2ndQuadrant.fr Whole thread Raw |
| In response to | Re: Extension Templates S03E11 (Jeff Davis <pgsql@j-davis.com>) |
| Responses |
Re: Extension Templates S03E11
|
| List | pgsql-hackers |
Jeff Davis <pgsql@j-davis.com> writes:
> I think that Stephen was just talking about the naming. I would have
> expected the names to be something like "xtmpl" (which is the shortest
> abbreviation that came to my mind) rather than "tpl", for instance. Use
> of "template" is a bit ambiguous.
To be honest I'm not following along with the complaint. What object
would you liked to be named xtmpl rather than what it is called now?
If you're refering to the catalog column names such as tplname and
tplowner and the like, the tradition AFAICS is to find a trigram prefix
for those entries… and that's what I did.
> However, I find the "full version" quite awkward still. I don't think
> it's purely a documentation issue -- the "default full version" concept
> itself is a bit awkward.
Yes. I coulnd't find a better name, and I would quite like that we do.
There are two ideas behind that feature:
- When we released hstore 1.1 we had a choice of either providing still hstore--1.0.sql and hstore--1.1.sql or only
thelatter, deprecating the 1.0 version for the next release.
The default_major_version feature allows to only ship hstore-1.0.sql and still offer full support for hstore 1.0
and1.1.
Note that it's problematic given the current implementation of pg_upgrade, where when migrating from 9.1 to 9.2
(IIRCthat's when hstore got to 1.1) you can result in either still having hstore 1.0 in your database if you used
pg_upgradeor have hstore 1.1 already if you used pg_dump and pg_restore.
Note also that if you install 9.2 then by a technically constrained choice of policy in the project, then you
cannotcontinue using hstore 1.0.
So the goal is to simplify extension authors management of sql install and upgrade scripts while giving more
optionsto the users of extension wrt the version they want to be using.
- With Extension Templates, the extension author can be providing scripts foo--1.0.sql and foo--1.0--1.1.sql and run
theupgrade with
ALTER EXTENSION foo UPDATE TO '1.1';
Now what happens at pg_restore time? We only have the 1.0 and 1.0--1.1 scripts, yet we want to be installing foo
version1.1.
So we need the "default_major_version" capabilities, whatever the name we choose. Hence my inclusion of that
featurein the Extension Template patch.
> If I understand correctly, it goes something like this:
>
> When a user does:
> CREATE EXTENSION foo VERSION '3.0';
>
> and there are templates for 1.0, 2.0, and 2.1, and upgrades from
> 1.0->2.0, 2.0->2.1, and 2.1->3.0, then there are three possible actions
> that might be taken:
>
> 1. Install 1.0 and run three upgrades
> 2. Install 2.0 and run two upgrade
> 3. Install 2.1 and run one upgrade
With PostgreSQL versions 9.1, 9.2 and 9.3, given the scripts you're
listing, the command you propose will just fail. Full stop. ERROR.
> The second one (in an "else" branch) shouldn't happen, assuming
> default_full_version points at a proper full version, right?
Will review, thanks.
> It seems like it's for pg_dump, so it can avoid outputting the extension
> templates and just say "VERSION 'x.y'" without worrying about which
> version it needs to start from.
Exactly. We need pg_dump to be smart enough for handling the case as
soon as we have Extension Templates, and we already have said smarts in
the backend code. They were just not applied at CREATE EXTENSION time
before this patch.
> That seems like a legitimate purpose, but I think we can come up with
> something that's a little easier on users and easier to document (and
> name). Perhaps just find the shortest upgrade path to the version
> requested (using some arbitrary but deterministic tiebreaker)?
The danger is that the shorter path could well include a downgrade, and
nobody tests for downgrading paths IME. So I keep thinking we should ask
the extension author to give us a starting point. Now, if you have a
better name for it than “default_full_version”, I'm all ears!
Regards,
--
Dimitri Fontaine
http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support
pgsql-hackers by date: