The following bug has been logged online:
Bug reference: 6067
Logged by: David Fetter
Email address: dfetter@vmware.com
PostgreSQL version: 9.0.4
Operating system: Linux
Description: In PL/pgsql, EXISTS(SELECT ... INTO...) fails
Details:
Here's some example code that reproduces the problem:
CREATE OR REPLACE FUNCTION foo()
RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
i int;
BEGIN
IF EXISTS (SELECT 1 INTO STRICT i) THEN
RAISE NOTICE '%', a;
END IF;
RETURN;
END;
$$;
ERROR: syntax error at or near "i"
LINE 8: IF EXISTS (SELECT 1 INTO STRICT i) THEN
^
This came up in a case where there was an IF block that checked some
conditions before checking whether there was a row. If it found a row, it
was supposed to use it in an EXCEPTION. Instead, I had to do the query
unconditionally, check the FOUND block in a separate nested IF statement,
and generally uglify the code.
Not everybody in IRC agreed that this is a bug, though.