• T
    Fix alignment and toasting bugs in range types. · ad50934e
    Tom Lane 提交于
    A range type whose element type has 'd' alignment must have 'd' alignment
    itself, else there is no guarantee that the element value can be used
    in-place.  (Because range_deserialize uses att_align_pointer which forcibly
    aligns the given pointer, violations of this rule did not lead to SIGBUS
    but rather to garbage data being extracted, as in one of the added
    regression test cases.)
    
    Also, you can't put a toast pointer inside a range datum, since the
    referenced value could disappear with the range datum still present.
    For consistency with the handling of arrays and records, I also forced
    decompression of in-line-compressed bound values.  It would work to store
    them as-is, but our policy is to avoid situations that might result in
    double compression.
    
    Add assorted regression tests for this, and bump catversion because of
    fixes to built-in pg_type entries.
    
    Also some marginal cleanup of inconsistent/unnecessary error checks.
    ad50934e
rangetypes.c 50.3 KB