pgsql: Fix failures in validateForeignKeyConstraint's slow path.

Started by Tom Laneover 7 years ago1 messagescomitters
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

Fix failures in validateForeignKeyConstraint's slow path.

The foreign-key-checking loop in ATRewriteTables failed to ignore
relations without storage (e.g., partitioned tables), unlike the
initial loop. This accidentally worked as long as RI_Initial_Check
succeeded, which it does in most practical cases (including all the
ones exercised in the existing regression tests :-(). However, if
that failed, as for instance when there are permissions issues,
then we entered the slow fire-the-trigger-on-each-tuple path.
And that would try to read from the referencing relation, and fail
if it lacks storage.

A second problem, recently introduced in HEAD, was that this loop
had been broken by sloppy refactoring for the tableam API changes.

Repair both issues, and add a regression test case so we have some
coverage on this code path. Back-patch as needed to v11.

(It looks like this code could do with additional bulletproofing,
but let's get a working test case in place first.)

Hadi Moshayedi, Tom Lane, Andres Freund

Discussion: /messages/by-id/CAK=1=WrnNmBbe5D9sm3t0a6dnAq3cdbF1vXY816j1wsMqzC8bw@mail.gmail.com
Discussion: /messages/by-id/19030.1554574075@sss.pgh.pa.us
Discussion: /messages/by-id/20190325180405.jytoehuzkeozggxx@alap3.anarazel.de

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/c2a5fb33d104afbe2c4877ddce2689bccd4eb1f1

Modified Files
--------------
src/backend/commands/tablecmds.c | 9 +++++++++
src/test/regress/expected/foreign_key.out | 28 +++++++++++++++++++++++++++-
src/test/regress/sql/foreign_key.sql | 25 +++++++++++++++++++++++++
3 files changed, 61 insertions(+), 1 deletion(-)