public inbox for [email protected]  
help / color / mirror / Atom feed
From: Tom Lane <[email protected]>
To: Josh Kupershmidt <[email protected]>
Cc: Pavel Stehule <[email protected]>
Cc: pgsql-docs <[email protected]>
Subject: Re: [BUGS] documentation bug - behave of NEW a OLD in plpgsql's triggers
Date: Thu, 05 May 2011 22:36:35 -0400
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<[email protected]>

Josh Kupershmidt <[email protected]> writes:
> [Moving to -docs]
> On Mon, May 2, 2011 at 12:00 PM, Pavel Stehule <[email protected]> wrote:
>> It isn't correct. NEW is not declared in DELETE trigger, OLD isn't
>> declared in INSERT

That claim is flat out wrong.

> If I've understood you correctly, the problem is that the docs claim
> that the variables are defined with a value of NULL, when in fact they
> are undefined. For example, if you try to use variable NEW in a delete
> trigger, you'll get an error message like:
> |  ERROR:  record "new" is not assigned yet
> |  DETAIL:  The tuple structure of a not-yet-assigned record is indeterminate.

That is, in fact, exactly the behavior you get if you declare a RECORD
variable and set it to NULL.  If these variables were indeed not
declared, you'd get a complaint about "new" not being a known variable.
Observe:

regression=# create function foo(int) returns void as $$
regression$# begin
regression$#   new.x := $1;
regression$# end$$ language plpgsql;
ERROR:  "new.x" is not a known variable
LINE 3:   new.x := $1;
          ^

versus

regression=# create function foo(int) returns void as $$
regression$# declare new record;
regression$# begin
regression$#   new := null;
regression$#   new.x := $1;
regression$# end$$ language plpgsql;
CREATE FUNCTION
regression=# select foo(1);
ERROR:  record "new" is not assigned yet
DETAIL:  The tuple structure of a not-yet-assigned record is indeterminate.
CONTEXT:  PL/pgSQL function "foo" line 5 at assignment

			regards, tom lane



view thread (11+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: [BUGS] documentation bug - behave of NEW a OLD in plpgsql's triggers
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox