Hi all,
I've run into this issue recently after upgrading to PG 12.7 from PG 10.16. It seems that there is now a difference between a row type variable resulting from an empty "select into" versus one that is null. Is this expected behaviour?
create schema mytest;
create table if not exists mytest."Foo" (
a int
);
create or replace function
mytest."testFoo"()
returns setof text
security definer
language plpgsql
as $$
declare
_row mytest."Foo";
begin
return next is(_row, null, 'before select is');
return next ok(_row is null, 'before select ok');
select *
into _row
from mytest."Foo"
where false;
return next is(_row, null, 'after select is');
return next ok(_row is null, 'after select ok');
end;
$$;
select * from runtests('mytest', '^testFoo');
Output on PG12:
runtests
------------------------------------------
# Subtest: mytest."testFoo"()
ok 1 - before select is
ok 2 - before select ok
not ok 3 - after select is +
# Failed test 3: "after select is" +
# have: NULL +
# want: NULL
ok 4 - after select ok
1..4
# Looks like you failed 1 tests of 4
not ok 1 - mytest."testFoo" +
# Failed test 1: "mytest."testFoo""
1..1
# Looks like you failed 1 test of 1
(10 rows)
runtests
-----------------------------------
# Subtest: mytest."testFoo"()
ok 1 - before select is
ok 2 - before select ok
ok 3 - after select is
ok 4 - after select ok
1..4
ok 1 - mytest."testFoo"
1..1
(8 rows)
Thanks!