pgsql: Fix deserialization of pg_mcv_list values

From: Tomas Vondra <tomas(dot)vondra(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix deserialization of pg_mcv_list values
Date: 2019-03-28 19:22:43
Message-ID: E1h9abr-0008DR-J5@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix deserialization of pg_mcv_list values

There were multiple issues in deserialization of pg_mcv_list values.

Firstly, the data is loaded from syscache, but the deserialization was
performed after ReleaseSysCache(), at which point the data might have
already disappeared. Fixed by moving the calls in statext_mcv_load,
and using the same NULL-handling code as existing stats.

Secondly, the deserialized representation used pointers into the
serialized representation. But that is also unsafe, because the data
may disappear at any time. Fixed by reworking and simplifying the
deserialization code to always copy all the data.

And thirdly, when deserializing values for types passed by value, the
code simply did memcpy(d,s,typlen) which however does not work on
bigendian machines. Fixed by using fetch_att/store_att_byval.

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/62bf0fb35cb370e9650981ff0333d198e955bd54

Modified Files
--------------
src/backend/statistics/mcv.c | 436 +++++++++++++++++-------------------
src/include/statistics/statistics.h | 2 +-
2 files changed, 207 insertions(+), 231 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tomas Vondra 2019-03-28 19:37:11 Re: pgsql: Add support for multivariate MCV lists
Previous Message Tomas Vondra 2019-03-28 18:33:36 Re: pgsql: Add support for multivariate MCV lists