Is there some way to test an unassigned record for null? (Sorry, sqlfiddle doesn't like my DO block.) Thanks.
DO
$$
DECLARE
r record;
BEGIN
r := null;
if r is null    -- ERROR:  record "r" is not assigned yet
then
end if;
END
$$;
                The error can be avoided by writing:
   select null into r;
or alternatively:
   r:=row(null);
such that r gets initialized with a tuple structure.
Still, be aware that record variables are unintuitive in other of ways concerning NULLs, and more generally hard to work with outside of their base use case (cursor-style iterating).
If you wrap the test with an exception handler you can use the "not initialized" error to do the check for you.
DO $$
DECLARE
r record;
BEGIN
r := null;
  BEGIN
    IF r IS NOT NULL THEN
        raise notice 'R IS INITIALIZED';
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
        raise notice 'R IS NOT INITIALIZED';
  END;
END
$$;
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With