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
Re: BUG #8695: Reloading dump fails at COMMENT ON EXTENSION plpgsql |
| 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: