BUG #5857: pg_restore --clean dropping type too soon

From: "Stuart Bishop" <stuart(at)stuartbishop(dot)net>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #5857: pg_restore --clean dropping type too soon
Date: 2011-01-31 13:44:59
Message-ID: 201101311344.p0VDixSt089341@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 5857
Logged by: Stuart Bishop
Email address: stuart(at)stuartbishop(dot)net
PostgreSQL version: 8.4.6
Operating system: Ubuntu 10.10
Description: pg_restore --clean dropping type too soon
Details:

"pg_restore --clean" appears to have an ordering problem, where a custom
type is being dropped before some functions that use that custom type as a
parameter, which fails.

$ psql -d foo -f /usr/share/postgresql/8.4/contrib/debversion.sql >
/dev/null
psql:/usr/share/postgresql/8.4/contrib/debversion.sql:28: NOTICE: return
type debversion is only a shell
psql:/usr/share/postgresql/8.4/contrib/debversion.sql:34: NOTICE: argument
type debversion is only a shell
psql:/usr/share/postgresql/8.4/contrib/debversion.sql:40: NOTICE: return
type debversion is only a shell
psql:/usr/share/postgresql/8.4/contrib/debversion.sql:46: NOTICE: argument
type debversion is only a shell

$ pg_dump --format=c foo | pg_restore --clean | grep debversion
[...]
DROP FUNCTION public.debversion(character);
DROP TYPE public.debversion CASCADE;
DROP FUNCTION public.debversionsend(debversion);
[...]

The relevant part of debversion.sql seems to be:

CREATE TYPE debversion;

CREATE OR REPLACE FUNCTION debversionin(cstring)
RETURNS debversion
AS 'textin'
LANGUAGE 'internal'
IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION debversionout(debversion)
RETURNS cstring
AS 'textout'
LANGUAGE 'internal'
IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION debversionrecv(internal)
RETURNS debversion
AS 'textrecv'
LANGUAGE 'internal'
STABLE STRICT;

CREATE OR REPLACE FUNCTION debversionsend(debversion)
RETURNS bytea
AS 'textsend'
LANGUAGE 'internal'
STABLE STRICT;

CREATE TYPE debversion (
LIKE = text,
INPUT = debversionin,
OUTPUT = debversionout,
RECEIVE = debversionrecv,
SEND = debversionsend,
-- make it a non-preferred member of string type category
CATEGORY = 'S',
PREFERRED = false
);

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Ilie, Radu 2011-01-31 15:19:21 Re: BUG #5849: Stats Collector Frozen - Autovacuum Not Working Anymore
Previous Message Naoya Anzai 2011-01-31 11:42:31 BUG #5856: pg_attribute.attinhcount is not correct.