The following bug has been logged online: Bug reference: 6165 Logged by: raf Email address: r...@raf.org PostgreSQL version: 9.0.4 Operating system: N/A Description: documentation bug in plpgsql-declarations.html and plpgsql-statements.html (or plpgsql parser bug) Details:
the documentation available at: http://www.postgresql.org/docs/current/static/plpgsql-declarations.html states that the general syntax of a variable declaration is: name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := } expression ]; when it is really: name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := | = } expression ]; i.e. an sql equality operator ("=") is accepted and acts as if it were a plpgsql assignment operator (":="). similarly, the documentation available at: http://www.postgresql.org/docs/current/static/plpgsql-statements.html states that an assignment of a value to a PL/pgSQL variable is written as: variable := expression; even though the sql equality operator works too: variable = expression; so, there is either a plpgsql parser bug that treats the sql equality operator as the plpgsql assignment operator, or "=" is an undocumented alternative to the documented plpgsql assignment operator (":="). the only mention i have found of "=" being an assignment operator is in the documentation that shows: GET DIAGNOSTICS variable = item [ , ... ]; but i think that might be a special case. example demonstration: do $$ declare i integer = 5; begin raise notice '%', i; i = 6; raise notice %', i; end $$; will output 5 and then 6 (as expected by someone who doesn't know that they should be using ":=" according to the documentation). -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs