The "TRUNCATE table while we're holding references to it" bug (3883), is causing an assertion failure on 8.2, when the TRUNCATE is called in a trigger:

Script:

CREATE TABLE proc(n int);
INSERT INTO proc VALUES (9);

CREATE OR REPLACE FUNCTION deltrig() RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
  EXECUTE 'TRUNCATE TABLE proc';
  RETURN OLD;
end;
$$;

CREATE TRIGGER trg_proc BEFORE DELETE ON PROC FOR EACH ROW EXECUTE PROCEDURE deltrig();

DELETE FROM proc WHERE n=9;


Error message:

TRAP: FailedAssertion("!(( ((void) ((bool) ((! assert_enabled) || ! (!(((void*)(lp) != ((void *)0)))) || (ExceptionalCondition("!(((void*)(lp) != ((void *)0)))", ("FailedAssertion"), "heapam.c", 1595))))), (bool) (((lp)->lp_flags & 0x01) != 0) ))", File: "heapam.c", Line: 1595)

With assertions disabled, you get an "attempted to delete invisible tuple" error, but it seems like good luck that it doesn't lead to a crash.

I think we need to backpatch the fix for this...

--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

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

Reply via email to