If you do this sequence of events, you get a failure to restore:
1. As superuser, do this:
test2=# CREATE FUNCTION plpgsql_call_handler () RETURNS language_handler
test2-# AS '$libdir/plpgsql.so', 'plpgsql_call_handler'
test2-# LANGUAGE c;
CREATE FUNCTION
2. Drop privs.
test2=# alter user chriskl with nocreateuser;
So, now we're a regular joe user.
3. pg_dump now gives this:
SET SESSION AUTHORIZATION 'chriskl';
SET search_path = public, pg_catalog;
--
-- TOC entry 37 (OID 853309)
-- Name: plpgsql_call_handler(); Type: FUNC PROCEDURAL LANGUAGE; Schema:
public; Owner: chriskl
--
CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS '$libdir/plpgsql.so', 'plpgsql_call_handler'
LANGUAGEc;
4. Now, trying to restore this as the joe user gives:
test2=> CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
test2-> AS '$libdir/plpgsql.so', 'plpgsql_call_handler'
test2-> LANGUAGE c;
ERROR: permission denied for language c
This caused me pain in the 7.4 upgrade I just performed...
Chris