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