ON COMMIT actions and inheritance

From: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Cc: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Subject: ON COMMIT actions and inheritance
Date: 2018-11-05 05:37:05
Message-ID: 68f17907-ec98-1192-f99f-8011400517f5@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Michael pointed out a problem with specifying different ON COMMIT actions
on a temporary inheritance parent and its children:

https://www.postgresql.org/message-id/20181102051804.GV1727%40paquier.xyz

The problem is that when PreCommit_on_commit_actions() executes an ON
COMMIT DROP action on the parent, it will drop its children as well. It
doesn't however remove the children's own actions, especially ON COMMIT
DELETE ROWS, from the list and when it gets around to executing them, the
children are already gone. That causes the heap_open in heap_truncate to
fail with an error like this:

ERROR: XX000: could not open relation with OID 16420
LOCATION: relation_open, heapam.c:1138

One way to fix that is to remove the tables that no longer exist from the
list that's passed to heap_truncate(), which the attached patch implements.

Thanks,
Amit

Attachment Content-Type Size
0001-Check-relation-still-exists-before-applying-ON-COMMI.patch text/plain 3.8 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Corey Huinker 2018-11-05 05:53:33 Re: partitioned tables referenced by FKs
Previous Message Rajkumar Raghuwanshi 2018-11-05 05:25:54 Re: Getting ERROR: could not open file "base/13164/t3_16388" with partition table with ON COMMIT