Received: from maia.hub.org (maia-5.hub.org [200.46.204.29]) by mail.postgresql.org (Postfix) with ESMTP id D16E31337BA3 for ; Thu, 5 May 2011 21:57:05 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.29]) (amavisd-maia, port 10024) with ESMTP id 52268-04 for ; Fri, 6 May 2011 00:56:59 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wy0-f174.google.com (mail-wy0-f174.google.com [74.125.82.174]) by mail.postgresql.org (Postfix) with ESMTP id 0C66E1337B97 for ; Thu, 5 May 2011 21:56:56 -0300 (ADT) Received: by wya21 with SMTP id 21so2029406wya.19 for ; Thu, 05 May 2011 17:56:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=Pj2c15vfyif0TwLKwr4KIwCxW7GLapCvoTJyV4pGwE8=; b=lZmlRNXs7f3FLAoERYHOXOe1MM7jdrhRJUHMl8Tc52ECOWFwwk3XOlDZsFwhFjinC9 xwWV/Y/N2YjMf0RRQr3IJVhWbtb6BJuhim+o8EwXDnU6YBx3SNWqXYgcGOSKJpN9QT0V S+RpDqUdmavvv6MkwOJGKVA1PE3LGV505tfUI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=bcc:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; b=aEVydZ6x9kp2H+1H55xPK6NXW1HWN2Fte6Y5gHYuejqbfOWs2C4aviVW/my7vVcc7i l7aMN9Mt8zIePm1yrB16g4DPUNZEiMMYOFYoTgzDNG//UVE8YOQLYUzZZEfBl+xBGbso LMkpKbukujQRYE3XSKWk9U1R7ZaSr1SmQJ5ok= Received: by 10.216.232.23 with SMTP id m23mr3081240weq.26.1304643416151; Thu, 05 May 2011 17:56:56 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.121.15 with HTTP; Thu, 5 May 2011 17:56:36 -0700 (PDT) In-Reply-To: References: From: Josh Kupershmidt Date: Thu, 5 May 2011 20:56:36 -0400 Message-ID: Subject: Re: documentation bug - behave of NEW a OLD in plpgsql's triggers To: Pavel Stehule Cc: pgsql-docs Content-Type: multipart/mixed; boundary=00151750d9f660d65d04a290f719 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.898 tagged_above=-5 required=5 tests=BAYES_00=-1.9, FREEMAIL_FROM=0.001, RFC_ABUSE_POST=0.001 X-Spam-Level: X-Archive-Number: 201105/33 X-Sequence-Number: 30172 --00151750d9f660d65d04a290f719 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable [Moving to -docs] On Mon, May 2, 2011 at 12:00 PM, Pavel Stehule wr= ote: > Hello > > one czech user reported a bug in documentation - > http://www.postgresql.org/docs/8.4/static/plpgsql-trigger.html > > NEW > > =A0 =A0Data type RECORD; variable holding the new database row for > INSERT/UPDATE operations in row-level triggers. This variable is NULL > in statement-level triggers and for DELETE operations. > OLD > > =A0 =A0Data type RECORD; variable holding the old database row for > UPDATE/DELETE operations in row-level triggers. This variable is NULL > in statement-level triggers and for INSERT operations. > > It isn't correct. NEW is not declared in DELETE trigger, OLD isn't > declared in INSERT 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 indetermina= te. How about a doc tweak like the attached? Josh --00151750d9f660d65d04a290f719 Content-Type: text/x-patch; charset=US-ASCII; name="plpgsql_triggers.patch" Content-Disposition: attachment; filename="plpgsql_triggers.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gncex1770 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGxw Z3NxbC5zZ21sCmluZGV4IDE4NjZlNDMuLjZiNmNmMzcgMTAwNjQ0CioqKiBhL2RvYy9zcmMvc2dt bC9wbHBnc3FsLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3BscGdzcWwuc2dtbAoqKioqKioqKioq KioqKiogUkFJU0UgdW5pcXVlX3Zpb2xhdGlvbiBVU0lORyBNRVNTQUdFID0gJwoqKiogMzI3OSwz Mjg2ICoqKioKICAgICAgICA8cGFyYT4KICAgICAgICAgRGF0YSB0eXBlIDx0eXBlPlJFQ09SRDwv dHlwZT47IHZhcmlhYmxlIGhvbGRpbmcgdGhlIG5ldwogICAgICAgICBkYXRhYmFzZSByb3cgZm9y IDxjb21tYW5kPklOU0VSVDwvPi88Y29tbWFuZD5VUERBVEU8Lz4gb3BlcmF0aW9ucyBpbiByb3ct bGV2ZWwKISAgICAgICAgdHJpZ2dlcnMuIFRoaXMgdmFyaWFibGUgaXMgPHN5bWJvbD5OVUxMPC9z eW1ib2w+IGluIHN0YXRlbWVudC1sZXZlbCB0cmlnZ2VycwohICAgICAgICBhbmQgZm9yIDxjb21t YW5kPkRFTEVURTwvY29tbWFuZD4gb3BlcmF0aW9ucy4KICAgICAgICA8L3BhcmE+CiAgICAgICA8 L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KLS0tIDMyNzksMzI4NiAtLS0tCiAgICAg ICAgPHBhcmE+CiAgICAgICAgIERhdGEgdHlwZSA8dHlwZT5SRUNPUkQ8L3R5cGU+OyB2YXJpYWJs ZSBob2xkaW5nIHRoZSBuZXcKICAgICAgICAgZGF0YWJhc2Ugcm93IGZvciA8Y29tbWFuZD5JTlNF UlQ8Lz4vPGNvbW1hbmQ+VVBEQVRFPC8+IG9wZXJhdGlvbnMgaW4gcm93LWxldmVsCiEgICAgICAg IHRyaWdnZXJzLiBUaGlzIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkIGluIHN0YXRlbWVudC1sZXZl bCB0cmlnZ2VycwohICAgICAgICBvciA8Y29tbWFuZD5ERUxFVEU8L2NvbW1hbmQ+IG9wZXJhdGlv bnMuCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50 cnk+CioqKioqKioqKioqKioqKiBSQUlTRSB1bmlxdWVfdmlvbGF0aW9uIFVTSU5HIE1FU1NBR0Ug PSAnCioqKiAzMjkxLDMyOTggKioqKgogICAgICAgIDxwYXJhPgogICAgICAgICBEYXRhIHR5cGUg PHR5cGU+UkVDT1JEPC90eXBlPjsgdmFyaWFibGUgaG9sZGluZyB0aGUgb2xkCiAgICAgICAgIGRh dGFiYXNlIHJvdyBmb3IgPGNvbW1hbmQ+VVBEQVRFPC8+Lzxjb21tYW5kPkRFTEVURTwvPiBvcGVy YXRpb25zIGluIHJvdy1sZXZlbAohICAgICAgICB0cmlnZ2Vycy4gVGhpcyB2YXJpYWJsZSBpcyA8 c3ltYm9sPk5VTEw8L3N5bWJvbD4gaW4gc3RhdGVtZW50LWxldmVsIHRyaWdnZXJzCiEgICAgICAg IGFuZCBmb3IgPGNvbW1hbmQ+SU5TRVJUPC9jb21tYW5kPiBvcGVyYXRpb25zLgogICAgICAgIDwv cGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgotLS0gMzI5MSwz Mjk4IC0tLS0KICAgICAgICA8cGFyYT4KICAgICAgICAgRGF0YSB0eXBlIDx0eXBlPlJFQ09SRDwv dHlwZT47IHZhcmlhYmxlIGhvbGRpbmcgdGhlIG9sZAogICAgICAgICBkYXRhYmFzZSByb3cgZm9y IDxjb21tYW5kPlVQREFURTwvPi88Y29tbWFuZD5ERUxFVEU8Lz4gb3BlcmF0aW9ucyBpbiByb3ct bGV2ZWwKISAgICAgICAgdHJpZ2dlcnMuIFRoaXMgdmFyaWFibGUgaXMgbm90IGRlZmluZWQgaW4g c3RhdGVtZW50LWxldmVsIHRyaWdnZXJzCiEgICAgICAgIG9yIDxjb21tYW5kPklOU0VSVDwvY29t bWFuZD4gb3BlcmF0aW9ucy4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4K --00151750d9f660d65d04a290f719--