This code:

    CREATE OR REPLACE FUNCTION foo() returns boolean as $$
    DECLARE
        have_rec record;
        want_rec record;
    BEGIN
        have_rec := row(1, 2);
        want_rec := row(3, 5);
        RETURN have_rec IS DISTINCT FROM want_rec;
    END;
    $$ language plpgsql;

    SELECT ROW(1, 2) IS DISTINCT FROM ROW(3, 5);

    SELECT foo();
    DROP FUNCTION foo();

Works as expected on 8.4, outputting:

     ?column?
    ----------
     t
    (1 row)

    Time: 48.626 ms
     foo
    -----
     t
    (1 row)

On 8.3, however, the row comparisons in the SQL statement works, but fails in the PL/pgSQL function, with this output:

     ?column?
    ----------
     t
    (1 row)

    psql:huh.sql:14: ERROR:  operator does not exist: record = record
    LINE 1: SELECT   $1  IS DISTINCT FROM  $2
                         ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
    QUERY:  SELECT   $1  IS DISTINCT FROM  $2
    CONTEXT:  PL/pgSQL function "foo" line 7 at RETURN


Is this a known issue in 8.3? If so, is there a known workaround?

Thanks,

David

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

Reply via email to