pg_dump does not honor namespaces when functions are used in index

From: Jean-Baptiste Quenot <jbq(at)caraldi(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: pg_dump does not honor namespaces when functions are used in index
Date: 2010-06-17 11:31:53
Message-ID: AANLkTinLbpmO1YnK2i5k3lYS9BZWASl8Uiv81wH_P12A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Dear hackers,

I have a pretty nasty problem to submit to your careful scrutiny.

Please consider the following piece of SQL code:

CREATE SCHEMA bar;
SET search_path = bar;

CREATE FUNCTION bar() RETURNS text AS $$
BEGIN
RETURN 'foobar';
END
$$ LANGUAGE plpgsql IMMUTABLE;

CREATE SCHEMA foo;
SET search_path = foo;

CREATE FUNCTION foo() RETURNS text AS $$
BEGIN
RETURN bar();
END
$$ LANGUAGE plpgsql IMMUTABLE;

SET search_path = public;

CREATE TABLE foobar (d text);
insert into foobar (d) values ('foobar');

set search_path = public, foo, bar;
CREATE INDEX foobar_d on foobar using btree(foo());

Run this on a newly created database, and dump it with pg_dump. You'll
notice that the dump is unusable. Creating a new database from this
dump will trigger the following error:

ERROR: function bar() does not exist
LINE 1: SELECT bar()
^
HINT: No function matches the given name and argument types. You
might need to add explicit type casts.
QUERY: SELECT bar()
CONTEXT: PL/pgSQL function "foo" line 2 at RETURN

How can we fix this?
--
Jean-Baptiste Quenot

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2010-06-17 11:34:40 Re: Should the JSON datatype be a specialization of text?
Previous Message Felde Norbert 2010-06-17 08:39:32 DB crash SOS