Обсуждение: Bug #826: opaque->internal translation required for 7.2 dumps

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

Bug #826: opaque->internal translation required for 7.2 dumps

От
pgsql-bugs@postgresql.org
Дата:
Philip Warner (pjw@rhyme.com.au) reports a bug with a severity of 2
The lower the number the more severe it is.

Short Description
opaque->internal translation required for 7.2 dumps

Long Description
Dumping from 7.2 using 7.3 gives:

CREATE FUNCTION postgis_gist_sel (opaque, oid, opaque, integer) RETURNS double precision
    AS '/var/lib/pgsql7.2.1/lib/contrib/libpostgis.so.0.7', 'postgis_gist_sel'
    LANGUAGE "C";

...

CREATE OPERATOR && (
    PROCEDURE = geometry_overlap,
    LEFTARG = geometry,
    RIGHTARG = geometry,
    COMMUTATOR = &&,
    RESTRICT = postgis_gist_sel,
    JOIN = positionjoinsel
);

Which results in the following error:

ERROR:  OperatorDef: function postgis_gist_sel(internal, oid, internal, integer) does not exist
pg_restore: [archiver (db)] could not execute query: ERROR:  OperatorDef: function postgis_gist_sel(internal, oid,
internal,integer 
) does not exist

This is similar to the problems we had earlier with opaque->internal conversions.

It also highlights another problem: that the full path name of objects is used when dumping functions. Should this not
beinstallation-relative, if it is in the install tree? 




Sample Code


No file was uploaded with this report

Re: Bug #826: opaque->internal translation required for 7.2 dumps

От
Tom Lane
Дата:
pgsql-bugs@postgresql.org writes:
> Dumping from 7.2 using 7.3 gives:

> CREATE FUNCTION postgis_gist_sel (opaque, oid, opaque, integer) RETURNS double precision
>     AS '/var/lib/pgsql7.2.1/lib/contrib/libpostgis.so.0.7', 'postgis_gist_sel'
>     LANGUAGE "C";

It's fairly unlikely that the 7.2 version of postgis (or anything else
that deals in 'internal' datatypes) would work in 7.3 anyway, so I
cannot get excited about this.  The best update procedure is probably
to load the 7.3 version into your new database before you restore ---
then the 7.2 definitions will fail (at least where they conflict) and
you'll be all set.

> It also highlights another problem: that the full path name of objects
> is used when dumping functions. Should this not be
> installation-relative, if it is in the install tree?

This is not pg_dump's fault, it is postgis' fault for not using $libdir
in the definition of the function.  If you look at any of the standard
contrib modules, you'll find they use version-free paths like

CREATE FUNCTION int4key_in(cstring)
RETURNS int4key
AS '$libdir/btree_gist'
LANGUAGE 'c' WITH (isstrict);

            regards, tom lane