Re: Extensions vs PGXS' MODULE_PATHNAME handling

From: Dimitri Fontaine <dimitri(at)2ndQuadrant(dot)fr>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Dimitri Fontaine <dimitri(at)2ndQuadrant(dot)fr>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Extensions vs PGXS' MODULE_PATHNAME handling
Date: 2011-02-14 16:39:40
Message-ID: m2vd0min8z.fsf@2ndQuadrant.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> writes:
> Thinking about this some more ... it seems like we now need two separate
> views, because there is some information that could change per-version,
> and some that really only makes sense at the per-extension level.

Makes sense.

> For instance, we could have pg_available_extensions that produces a row
> per primary control file, with columns
>
> name (view's effective primary key)
> default_version
> installed_version (NULL if not installed)
> comment (if one is present in primary control file)

Check.

> and pg_available_extension_versions that produces a row per install
> script, with columns
>
> name
> version ((name, version) is primary key)
> comment
> requires
> relocatable
> schema
>
> where the last four columns can vary across versions due to secondary
> control files.

I like this primary key because that's also the one for debian stable
distributions :) Joking apart, aren't we missing the encoding somewhere?

> Or we could combine these into just one view with pkey (name, version),
> but then the default_version and installed_version columns would be the
> same across all rows with the same extension name, which seems confusing
> and unnormalized.

Let's go with two views. Once we have that it's easy enough to LEFT
JOIN if we want a summarized view. Maybe we could even revive \dX.
Without pattern it would show the short form (pg_available_extension)
and given a pattern pg_available_extension_versions.

> I suggest instead that we invent a SRF, say
> pg_extension_update_paths(extension_name text) returns setof record,
> that returns a row for each pair of distinct version names found in
> the extension's install and update scripts, with columns

Agreed.

> source version name
> target other version name
> path update path from source to target, or NULL if none
>
> The output might look like this:
>
> 1.0 1.1 1.0--1.1
> 1.1 1.2 1.1--1.2
> unpackaged 1.0 unpackaged--1.0
> 1.0 1.2 1.0--1.1--1.2
> 1.0 unpackaged
> 1.1 1.0
> 1.1 unpackaged
> 1.2 1.1
> 1.2 1.0
> 1.2 unpackaged
> unpackaged 1.1 unpackaged--1.0--1.1
> unpackaged 1.2 unpackaged--1.0--1.1--1.2

What about having this chain column be an array of version strings? If
you want to see it this way, use array_to_string(path, '--')…

> where the first three rows correspond to available update scripts and
> the rest are synthesized.

The ordering is not clearly apparent, but I don't think it matters.

> (Looking at this, it looks like it could get pretty bulky pretty
> quickly. Maybe we should eliminate all rows in which the path would be
> NULL? Or just eliminate rows in which the target doesn't have an
> install script, which would remove the three rows with target =
> unpackaged in the above example?)

Removing NULL path rows seems the best option to me.

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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Kevin Grittner 2011-02-14 16:40:53 Re: using a lot of maintenance_work_mem
Previous Message Tom Lane 2011-02-14 16:32:52 Re: [HACKERS] "Extension" versus "module"