Make attstattarget nullable

From: Peter Eisentraut <peter(at)eisentraut(dot)org>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Make attstattarget nullable
Date: 2023-12-05 12:52:36
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

In [0] it was discussed that we could make attstattarget a nullable
column, instead of always storing an explicit -1 default value for most
columns. This patch implements this.

This changes the pg_attribute field attstattarget into a nullable field
in the variable-length part of the row. If no value is set by the user
for attstattarget, it is now null instead of previously -1. This saves
space in pg_attribute and tuple descriptors for most practical
scenarios. (ATTRIBUTE_FIXED_PART_SIZE is reduced from 108 to 104.)
Also, null is the semantically more correct value.

The ANALYZE code internally continues to represent the default
statistics target by -1, so that that code can avoid having to deal with
null values. But that is now contained to ANALYZE code. The DDL code
deals with attstattarget possibly null.

For system columns, the field is now always null but the effective value
0 (don't analyze) is assumed.

To set a column's statistics target to the default value, the new
command form ALTER TABLE ... SET STATISTICS DEFAULT can be used. (SET
STATISTICS -1 still works.)


Attachment Content-Type Size
v1-0001-Make-attstattarget-nullable.patch text/plain 23.4 KB


Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2023-12-05 12:58:10 Re: table inheritance versus column compression and storage settings
Previous Message Amit Langote 2023-12-05 12:25:01 Re: remaining sql/json patches