mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Re-order pg_attribute columns to eliminate some padding space.
Now that attcompression is just a char, there's a lot of wasted padding space after it. Move it into the group of char-wide columns to save a net of 4 bytes per pg_attribute entry. While we're at it, swap the order of attstorage and attalign to make for a more logical grouping of these columns. Also re-order actions in related code to match the new field ordering. This patch also fixes one outright bug: equalTupleDescs() failed to compare attcompression. That could, for example, cause relcache reload to fail to adopt a new value following a change. Michael Paquier and Tom Lane, per a gripe from Andres Freund. Discussion: https://postgr.es/m/20210517204803.iyk5wwvwgtjcmc5w@alap3.anarazel.de
This commit is contained in:
@ -699,8 +699,8 @@ DefineAttr(char *name, char *type, int attnum, int nullness)
|
||||
attrtypes[attnum]->atttypid = Ap->am_oid;
|
||||
attrtypes[attnum]->attlen = Ap->am_typ.typlen;
|
||||
attrtypes[attnum]->attbyval = Ap->am_typ.typbyval;
|
||||
attrtypes[attnum]->attstorage = Ap->am_typ.typstorage;
|
||||
attrtypes[attnum]->attalign = Ap->am_typ.typalign;
|
||||
attrtypes[attnum]->attstorage = Ap->am_typ.typstorage;
|
||||
attrtypes[attnum]->attcollation = Ap->am_typ.typcollation;
|
||||
/* if an array type, assume 1-dimensional attribute */
|
||||
if (Ap->am_typ.typelem != InvalidOid && Ap->am_typ.typlen < 0)
|
||||
@ -713,8 +713,8 @@ DefineAttr(char *name, char *type, int attnum, int nullness)
|
||||
attrtypes[attnum]->atttypid = TypInfo[typeoid].oid;
|
||||
attrtypes[attnum]->attlen = TypInfo[typeoid].len;
|
||||
attrtypes[attnum]->attbyval = TypInfo[typeoid].byval;
|
||||
attrtypes[attnum]->attstorage = TypInfo[typeoid].storage;
|
||||
attrtypes[attnum]->attalign = TypInfo[typeoid].align;
|
||||
attrtypes[attnum]->attstorage = TypInfo[typeoid].storage;
|
||||
attrtypes[attnum]->attcollation = TypInfo[typeoid].collation;
|
||||
/* if an array type, assume 1-dimensional attribute */
|
||||
if (TypInfo[typeoid].elem != InvalidOid &&
|
||||
@ -724,6 +724,11 @@ DefineAttr(char *name, char *type, int attnum, int nullness)
|
||||
attrtypes[attnum]->attndims = 0;
|
||||
}
|
||||
|
||||
if (IsStorageCompressible(attrtypes[attnum]->attstorage))
|
||||
attrtypes[attnum]->attcompression = GetDefaultToastCompression();
|
||||
else
|
||||
attrtypes[attnum]->attcompression = InvalidCompressionMethod;
|
||||
|
||||
/*
|
||||
* If a system catalog column is collation-aware, force it to use C
|
||||
* collation, so that its behavior is independent of the database's
|
||||
@ -737,10 +742,6 @@ DefineAttr(char *name, char *type, int attnum, int nullness)
|
||||
attrtypes[attnum]->attcacheoff = -1;
|
||||
attrtypes[attnum]->atttypmod = -1;
|
||||
attrtypes[attnum]->attislocal = true;
|
||||
if (IsStorageCompressible(attrtypes[attnum]->attstorage))
|
||||
attrtypes[attnum]->attcompression = GetDefaultToastCompression();
|
||||
else
|
||||
attrtypes[attnum]->attcompression = InvalidCompressionMethod;
|
||||
|
||||
if (nullness == BOOTCOL_NULL_FORCE_NOT_NULL)
|
||||
{
|
||||
|
Reference in New Issue
Block a user