pgsql: Fix possible loss of sync between rectypeid and underlying PLpgS

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix possible loss of sync between rectypeid and underlying PLpgS
Date: 2019-12-26 20:19:53
Message-ID: E1ikZbt-0007eQ-H7@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix possible loss of sync between rectypeid and underlying PLpgSQL_type.

When revalidate_rectypeid() acts to update a stale record type OID
in plpgsql's data structures, it fixes the active PLpgSQL_rec struct
as well as the PLpgSQL_type struct it references. However, the latter
is shared across function executions while the former is not. In a
later function execution, the PLpgSQL_rec struct would be reinitialized
by copy_plpgsql_datums and would then contain a stale type OID,
typically leading to "could not open relation with OID NNNN" errors.
revalidate_rectypeid() can easily fix this, fortunately, just by
treating typ->typoid as authoritative.

Per report and diagnosis from Ashutosh Sharma, though this is not his
suggested fix. Back-patch to v11 where this code came in.

Discussion: https://postgr.es/m/CAE9k0Pkd4dZwt9J5pS9xhJFWpUtqs05C9xk_GEwPzYdV=GxwWg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/4ba4bfaf256c17fe4c8f497924b74eb98241b84f

Modified Files
--------------
src/pl/plpgsql/src/expected/plpgsql_record.out | 6 ++++++
src/pl/plpgsql/src/pl_exec.c | 11 ++++++++++-
src/pl/plpgsql/src/sql/plpgsql_record.sql | 1 +
3 files changed, 17 insertions(+), 1 deletion(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andrew Dunstan 2019-12-26 21:30:04 Re: pgsql: Fix compiler warning for ppoll() on Cygwin
Previous Message Peter Geoghegan 2019-12-26 18:26:51 Re: pgsql: Rename files and headers related to index AM