hi,

how about making heap_form_tuple and its variants use smaller natts for
tuples whose trailing columns are NULL? depending on the schema, it can
save considerable space.
the most of code are ready to deal with such tuples for ALTER TABLE ADD
COLUMN anyway. (except system catalogs?)

YAMAMOTO Takashi

Search Discussions

  • Tom Lane at Nov 9, 2011 at 4:39 pm

    YAMAMOTO Takashi writes:
    how about making heap_form_tuple and its variants use smaller natts for
    tuples whose trailing columns are NULL?
    This idea has been proposed before, and rejected on the basis that it's
    unlikely to save enough to be worth the cycles needed to check for the
    case. Keep in mind that you aren't going to save anything at all unless
    the bitmap length decreases across a MAXALIGN boundary.

    regards, tom lane
  • YAMAMOTO Takashi at Nov 11, 2011 at 9:27 am
    hi,
    yamt@mwd.biglobe.ne.jp (YAMAMOTO Takashi) writes:
    how about making heap_form_tuple and its variants use smaller natts for
    tuples whose trailing columns are NULL?
    This idea has been proposed before, and rejected on the basis that it's
    unlikely to save enough to be worth the cycles needed to check for the
    case. Keep in mind that you aren't going to save anything at all unless
    the bitmap length decreases across a MAXALIGN boundary.
    but it also means that, if one-bit descrease happens to cross the boundary,
    you can save a MAXALIGN, right?

    btw, while playing with this, i noticed that pg_column_size+rowtype+aggregate
    produces unstable results. i guess it's because when nodeAgg handles
    grp_firstTuple, the tuple is converted to a short varlena. i don't know
    if it can be a real problem than just a weird looking.

    YAMAMOTO Takashi

    test=# create table t (i int);
    CREATE TABLE
    test=# insert into t values (1),(2),(3);
    INSERT 0 3
    test=# select pg_column_size(t.*) from t;
    pg_column_size
    ----------------
    28
    28
    28
    (3 rows)

    test=# select string_agg(pg_column_size(t.*)::text,',') from t;
    string_agg
    ------------
    25,28,28
    (1 row)

    test=#
    regards, tom lane

    --
    Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
    To make changes to your subscription:
    http://www.postgresql.org/mailpref/pgsql-hackers

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-hackers @
categoriespostgresql
postedNov 6, '11 at 11:14p
activeNov 11, '11 at 9:27a
posts3
users2
websitepostgresql.org...
irc#postgresql

2 users in discussion

YAMAMOTO Takashi: 2 posts Tom Lane: 1 post

People

Translate

site design / logo © 2021 Grokbase