BUG #6318: pg_dump for non-template languages is broken
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
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
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