Обсуждение: BUG #6318: pg_dump for non-template languages is broken

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

BUG #6318: pg_dump for non-template languages is broken

От
laurenz.albe@wien.gv.at
Дата:
The following bug has been logged on the website:

Bug reference:      6318
Logged by:          Laurenz Albe
Email address:      laurenz.albe@wien.gv.at
PostgreSQL version: 9.1.1
Operating system:   Linux (RHEL 3)
Description:=20=20=20=20=20=20=20=20

How to reproduce:

postgres=3D# CREATE DATABASE dumpme;
postgres=3D# \c dumpme postgres
dumpme=3D# CREATE LANGUAGE mylang HANDLER plpgsql_call_handler INLINE
plpgsql_inline_handler VALIDATOR plpgsql_validator;
dumpme=3D# \q

$ pg_dump -C -F p -f dumpme.sql dumpme

$ psql -c 'DROP DATABASE dumpme'

$ psql -f dumpme.sql
[...]
psql:dumpme.sql:32: ERROR:  unsupported language "mylang"
HINT:  The supported languages are listed in the pg_pltemplate system
catalog.
psql:dumpme.sql:35: ERROR:  language "mylang" does not exist
[...]

The reason is that the dump contains:

--
-- Name: mylang; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: advpg
--

CREATE OR REPLACE PROCEDURAL LANGUAGE mylang;


ALTER PROCEDURAL LANGUAGE mylang OWNER TO advpg;

Yours,
Laurenz Albe

Re: BUG #6318: pg_dump for non-template languages is broken

От
Tom Lane
Дата:
laurenz.albe@wien.gv.at writes:
> dumpme=# CREATE LANGUAGE mylang HANDLER plpgsql_call_handler INLINE
> plpgsql_inline_handler VALIDATOR plpgsql_validator;

I don't think this is a particularly interesting use-case.  The reason
it doesn't work for you is that it's depending on support functions
that are in pg_catalog, and as the comment in pg_dump.c says:

    /*
     * Try to find the support function(s).  It is not an error if we don't
     * find them --- if the functions are in the pg_catalog schema, as is
     * standard in 8.1 and up, then we won't have loaded them. (In this case
     * we will emit a parameterless CREATE LANGUAGE command, which will
     * require PL template knowledge in the backend to reload.)
     */

An actual add-on procedural language would not fall foul of this.

            regards, tom lane

Re: BUG #6318: pg_dump for non-template languages is broken

От
"Albe Laurenz"
Дата:
Tom Lane wrote:
>> dumpme=3D# CREATE LANGUAGE mylang HANDLER plpgsql_call_handler INLINE
>> plpgsql_inline_handler VALIDATOR plpgsql_validator;

> I don't think this is a particularly interesting use-case.  The reason
> it doesn't work for you is that it's depending on support functions
> that are in pg_catalog, and as the comment in pg_dump.c says:

> An actual add-on procedural language would not fall foul of this.

Oh I see. Sorry for the noise.

Yours,
Laurenz Albe