Bug reference: 14549 Logged by: Stefan Stefanov Email address: stefanov.sm@abv.bg PostgreSQL version: 9.5.3 Operating system: Red Hat, 64 bit Description:
Hi all, I found (the hard way) that in pl/pgsql SELECT INTO statement a syntax error may remain unnoticed. This simple example works as expected and produces '1, 2, 3' notice.
DO language plpgsql $$ DECLARE vara integer; varb integer; varc integer; BEGIN SELECT 1, 2, 3 INTO vara, varb, varc; RAISE NOTICE '% % %', vara, varb, varc; END; $$;
However if you omit a comma (or even replace the comma with AS) between varb and varc in the INTO list then no syntax error is produced and the resulting notice is '1 2 <NULL>'.
DO language plpgsql $$ DECLARE vara integer; varb integer; varc integer; BEGIN SELECT 1, 2, 3 INTO vara, varb AS varc; RAISE NOTICE '% % %', vara, varb, varc; END; $$;
A few more clearly erratic combinations of SELECT expressions and the INTO list also 'work' and issue misleading results. Same in functions. For me it produced a bug that was difficult to see and track.
Best, Stefan
It is not a bug - plpgsql is designed be tolerant to different columns and data types in left and right part of assignment.
You can use some tools for easy detecting these issues: