Bug in triggers

From: "Oleg Serov" <serovov(at)gmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Bug in triggers
Date: 2008-09-26 10:27:46
Message-ID: cec7c6df0809260327w6e80490bxba933c762c94f77d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

SQL code:

ROLLBACK;
BEGIN;
CREATE TYPE "composite_type" AS (
"typename" VARCHAR
);

CREATE TABLE "buggy" (
"id" BIGINT NOT NULL,
"bug" "composite_type",
CONSTRAINT "buggy_pkey" PRIMARY KEY("id")
) WITH OIDS;

INSERT INTO buggy (id, bug) VALUES
(100196418052926086, NULL);

CREATE OR REPLACE FUNCTION "public"."test_bug" () RETURNS trigger AS
$body$
DECLARE
tmp_old buggy%rowtype;
tmp_new buggy%rowtype;
BEGIN
RAISE NOTICE 'OLD: %', OLD;
RAISE NOTICE 'NEW: %', NEW;

tmp_old := OLD;
RAISE NOTICE 'TMP OLD: %', tmp_old;

RAISE NOTICE 'TMP OLD = OLD => %', tmp_old::text = OLD::text;

tmp_old.id := NEW.id;
tmp_new := NEW;

RAISE NOTICE 'TMP OLD: %', tmp_old;
RAISE NOTICE 'TMP NEW: %', tmp_new;

RAISE NOTICE 'TMP OLD = TMP NEW => %', tmp_old::text = tmp_new::text;
RAISE NOTICE 'TMP OLD = NEW => %', tmp_old::text = NEW::text;

IF (tmp_old::text <> tmp_new::text) <> (tmp_old::text <> NEW::text)
THEN
RAISE EXCEPTION 'PGSQL BUG!';
END IF;
RETURN OLD;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

CREATE TRIGGER "t_bug" BEFORE UPDATE
ON buggy FOR EACH ROW
EXECUTE PROCEDURE "test_bug"();

UPDATE buggy SET id = 100112779830304388 WHERE 100196418052926086 = id;
/**
NOTICE: OLD: (100196418052926086,)
NOTICE: NEW: (100112779830304388,)
NOTICE: TMP OLD: (100196418052926086,"()")
NOTICE: TMP OLD = OLD => f
NOTICE: TMP OLD: (100112779830304388,"()")
NOTICE: TMP NEW: (100112779830304388,"()")
NOTICE: TMP OLD = TMP NEW => t
NOTICE: TMP OLD = NEW => f -- BUG!!!

**/

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Oleg Serov 2008-09-26 11:57:32 Re: Bug in triggers
Previous Message Tom Lane 2008-09-26 03:31:17 Re: ERROR: unexpected data beyond EOF in block XXXXX of relation "file"