From 6db6630943be39eee31cb0411e2a849ec97bc66c Mon Sep 17 00:00:00 2001 From: Nikita Glukhov Date: Wed, 12 Jan 2022 01:23:18 +0300 Subject: [PATCH 2/2] Fix alignment of custom TOAST pointers --- src/backend/access/common/heaptuple.c | 5 ++++- src/include/access/tupmacs.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 0b56b0fa5a9..47c808d462f 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -242,7 +242,10 @@ fill_val(Form_pg_attribute att, else { *infomask |= HEAP_HASEXTERNAL; - /* no alignment, since it's short by definition */ + if (VARATT_IS_CUSTOM(val)) + data = (char *) att_align_nominal(data, + att->attalign); + /* else no alignment, since it's short by definition */ data_length = VARSIZE_EXTERNAL(val); memcpy(data, val, data_length); } diff --git a/src/include/access/tupmacs.h b/src/include/access/tupmacs.h index 65ac1ef3fc8..ddb164ef2ba 100644 --- a/src/include/access/tupmacs.h +++ b/src/include/access/tupmacs.h @@ -104,7 +104,7 @@ */ #define att_align_datum(cur_offset, attalign, attlen, attdatum) \ ( \ - ((attlen) == -1 && VARATT_IS_SHORT(DatumGetPointer(attdatum))) ? \ + ((attlen) == -1 && (!VARATT_IS_CUSTOM(DatumGetPointer(attdatum)) && VARATT_IS_SHORT(DatumGetPointer(attdatum)))) ? \ (uintptr_t) (cur_offset) : \ att_align_nominal(cur_offset, attalign) \ ) -- 2.25.1