Richard Huxton <dev@archonet.com> writes:
> I think it's just the brackets () - plpgsql's parser isn't terribly
> sophisticated.
It's not plpgsql's fault --- you'll get the same result if you put
parentheses around a DELETE command at the SQL command line.
regression=# (delete from fool);
ERROR: syntax error at or near "delete"
LINE 1: (delete from fool); ^
The OP may be used to putting parens into his FOR loops because it
works with SELECT:
regression=# (select * from zz1);f1 | f2 | f3
----+----+----
(0 rows)
The difference is that SELECT can be put into larger groupings (eg
UNIONs) so it has to be parenthesiz-able. If we ever considered
supporting DELETE RETURNING as a component of larger queries, this
syntax difference would likely go away.
regards, tom lane