• Tomas Vondra's avatar
    Fix deserialization of pg_mcv_list values · 62bf0fb3
    Tomas Vondra authored
    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.
    62bf0fb3
mcv.c 48 KB