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

Started by Laurenz Albeover 14 years ago3 messagesbugs
Jump to latest
#1Laurenz Albe
laurenz.albe@cybertec.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:

How to reproduce:

postgres=# CREATE DATABASE dumpme;
postgres=# \c dumpme postgres
dumpme=# CREATE LANGUAGE mylang HANDLER plpgsql_call_handler INLINE
plpgsql_inline_handler VALIDATOR plpgsql_validator;
dumpme=# \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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#1)
Re: BUG #6318: pg_dump for non-template languages is broken

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

#3Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Laurenz Albe (#1)
Re: BUG #6318: pg_dump for non-template languages is broken

Tom Lane wrote:

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:

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

Oh I see. Sorry for the noise.

Yours,
Laurenz Albe