Re: BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql
Date
Msg-id 20140331170009.GA18559@momjian.us
Whole thread Raw
In response to BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql  (chris@chrullrich.net)
Responses Re: BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql  (Christian Ullrich <chris@chrullrich.net>)
Re: BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql  (Bruce Momjian <bruce@momjian.us>)
List pgsql-bugs
On Sun, Dec 22, 2013 at 01:56:13AM +0000, chris@chrullrich.net wrote:
> The following bug has been logged on the website:
>
> Bug reference:      8695
> Logged by:          Christian Ullrich
> Email address:      chris@chrullrich.net
> PostgreSQL version: 9.3.2
> Operating system:   all
> Description:
>
> A non-superuser cannot reload any dump of a database that contains the
> plpgsql extension, because the dump unconditionally attempts to set the
> comment on that extension. This fails because plpgsql is owned by the
> superuser who installed it.
>
>
> This contradicts the manual, which says: "The dumps produced by pg_dump are
> relative to template0." The plpgsql extension is present in template0, with
> the identical comment, and therefore neither extension nor comment should be
> dumped at all. (I know this is splitting hairs, because pg_dump does not
> actually compare the subject database to template0, but still, the
> contradiction is there.)
>
>
> The extension itself is dumped as CREATE IF NOT EXISTS, so that works, but
> there is no conditional syntax for comments, and since pg_dump does not know
> whether the comment has been changed from the default, it could not use one
> anyway.
>
>
> I can think of one possible fix (aside from simply filtering that line from
> the dump): COMMENT could be a no-op if the requested comment is identical to
> the existing one.
>
>
> Another idea I had was to allow comments to be part of an extension, so that
> pg_dump would not dump them, but that does not work because pg_dump does not
> know if a comment has been changed from the original value. Not that anyone
> would ever do that.

I can reproduce this bug:

    $ psql test
    psql (9.4devel)
    Type "help" for help.

    test=> CREATE USER joe;
    CREATE ROLE
    test=> CREATE DATABASE test2 OWNER joe;
    CREATE DATABASE
    test=> \q
    $ pg_dump test | psql -e -U joe test2
    SET statement_timeout = 0;
    SET
    SET lock_timeout = 0;
    SET
    SET client_encoding = 'UTF8';
    SET
    SET standard_conforming_strings = on;
    SET
    SET check_function_bodies = false;
    SET
    SET client_min_messages = warning;
    SET
    CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
    CREATE EXTENSION
-->    COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
-->    ERROR:  must be owner of extension plpgsql
    REVOKE ALL ON SCHEMA public FROM PUBLIC;
    WARNING:  no privileges could be revoked for "public"
    REVOKE
    REVOKE ALL ON SCHEMA public FROM postgres;
    WARNING:  no privileges could be revoked for "public"
    REVOKE
    GRANT ALL ON SCHEMA public TO postgres;
    WARNING:  no privileges were granted for "public"
    GRANT
    GRANT ALL ON SCHEMA public TO PUBLIC;
    WARNING:  no privileges were granted for "public"
    GRANT

This would certainly cause a restore to abort for a non-super-user if
psql used --set ON_ERROR_STOP=on.  Any easy way to fix this?  I am not
super-excited about the suggested fixes listed above.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +

pgsql-bugs by date:

Previous
From: Jeff Janes
Date:
Subject: Re: BUG #9756: Inconsistent database after OS restart
Next
From: Christian Ullrich
Date:
Subject: Re: BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql