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

Lists: pgsql-bugs
From: laurenz(dot)albe(at)wien(dot)gv(dot)at
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #6318: pg_dump for non-template languages is broken
Date: 2011-12-02 11:06:41
Message-ID: E1RWQwz-0005Ug-06@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 6318
Logged by: Laurenz Albe
Email address: laurenz(dot)albe(at)wien(dot)gv(dot)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


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: laurenz(dot)albe(at)wien(dot)gv(dot)at
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #6318: pg_dump for non-template languages is broken
Date: 2011-12-02 17:28:11
Message-ID: 19869.1322846891@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

laurenz(dot)albe(at)wien(dot)gv(dot)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


From: "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at>
To: "Tom Lane *EXTERN*" <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #6318: pg_dump for non-template languages is broken
Date: 2011-12-03 10:55:31
Message-ID: D960CB61B694CF459DCFB4B0128514C2049FCE7A@exadv11.host.magwien.gv.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

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