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'
    LANGUAGE c;

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

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to