Is this behaviour expected? (This is with 8.4.3 on FreeBSD.)

    create schema one;
    set search_path to one;

    create type foo as (x integer);
    create function foo (integer) returns foo
        language plpgsql as $$
            declare
                y foo;
            begin
                y.x = $1;
                return y;
            end
        $$;
    create cast (integer as foo) with function foo (integer);

    grant usage on schema one to public;
    grant execute on function foo (integer) to public;

    create schema two;

    -- reconnect as a different user

    set search_path to two;
    select 3::one.foo;
    ERROR:  type "foo" does not exist
    CONTEXT:  compilation of PL/pgSQL function "foo" near line 2

    set search_path to two, one;
    select 3::foo;
     foo
    -----
     (3)
    (1 row)

My understanding of things was that PL/pgSQL functions were compiled at
CREATE FUNCTION time, using the SEARCH_PATH currently in effect. Is that
wrong? Is there some GRANT I'm missing that will make this work?

Ben


-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply via email to