The following bug has been logged on the website:

Bug reference:      6632
Logged by:          Ignas Mikalajunas
Email address:      ig...@pow.lt
PostgreSQL version: 9.1.3
Operating system:   Ubuntu 11.11
Description:        

The snippet that reproduces the bug:
drop schema public cascade;
create schema public;

-- Setup
  BEGIN;
  CREATE TABLE apps (
            id bigserial NOT NULL,
            "type" varchar(32),
            primary key (id)
        );

  CREATE TABLE content_items (
     id bigserial NOT NULL,
     "type" varchar(32),
     app_id integer,

     wall_post_id integer,

     foreign key (app_id) references apps on delete cascade,
     foreign key (wall_post_id) references content_items on delete set
null,
     primary key (id)
  );

  CREATE OR REPLACE FUNCTION content_item_deleted_trigger() RETURNS trigger
AS $$
        BEGIN
            DELETE FROM
                content_items
            WHERE
                content_items.id = OLD.wall_post_id;
            RETURN OLD;
        END
        $$ LANGUAGE plpgsql;

  -- the problem is in this trigger, if I make it an "AFTER" it works as it
should
  CREATE TRIGGER content_item_deleted_trigger BEFORE DELETE ON
content_items
            FOR EACH ROW
            WHEN (OLD.wall_post_id is not null)
            EXECUTE PROCEDURE content_item_deleted_trigger();

  COMMIT;

-- End of schema setup

  BEGIN;
  INSERT INTO apps (type) VALUES ('basecamp');
  INSERT INTO content_items (type, app_id, wall_post_id)
                     VALUES ('wall_post', NULL, NULL);
  INSERT INTO content_items (type, app_id, wall_post_id)
                     VALUES ('basecamp_post', 1, 1);
  COMMIT;

-- End of setup

  BEGIN;
  DELETE FROM apps WHERE apps.id = 1;
  COMMIT;

-- This select still sees 1 item that refers to an app that does not exist
anymore

  BEGIN;
  SELECT count(*) from content_items;
  SELECT count(*) from apps;
  ROLLBACK;

I think being able to generate rows that do not pass constraints on a table
is a bug.


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to