Hi, I think PL/pgSQL is reporting unexpected errors when dealing with DECLARE blocks paired with <<label>>. I have approximated the program to a clean situation. When I execute this program, the PL/pgSQL engine does not report errors to me:
DO $$ DECLARE DECLARE var1 INT = 1; BEGIN RAISE NOTICE '%', var1; END; $$;
The failure to report an error here seems contrary to the documentation. When the end of the DO text is reached and only a single begin/end pair is seen the parser is being loose in being OK that one of the declares was not associated with a full block.
One block can have more DECLAREs
I am not sure if the empty list for DECLARE should be valid, but plpgsql parser allows it.
do $$ declare x int; declare y int; begin x := 1; y := 1; raise notice '% %', x,y; end; $$;