I have discovered what appears to be a severe bug in a development version of PostgreSQL 17 where a populated RECORD variable incorrectly fails an IS NOT NULL check.
Version Information:
PostgreSQL 17.5 (Debian 17.5-1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
Minimal Reproducible Example:
DO $$
DECLARE r RECORD; BEGIN RAISE NOTICE '--- Assigning a row with a NULL column into "r" ---'; SELECT 42 AS id, NULL::text AS name INTO r; RAISE NOTICE 'The value of r is: %', r; ASSERT r IS NOT NULL, 'ASSERTION FAILED: r IS NULL!'; RAISE NOTICE 'Assertion Passed.'; END $$;
Actual Output:
NOTICE: --- Assigning a row with a NULL column into "r" --- NOTICE: The value of r is: (42,) ERROR: ASSERTION FAILED: r IS NULL! CONTEXT: PL/pgSQL function inline_code_block line 8 at ASSERT
Expected Output: The ASSERT should pass without error. The RAISE NOTICE proves the record is populated immediately before the ASSERT fails. Thank you.