I would mention in the C comment that we are doing this for space
savings, but other than that, it seems fine.

---------------------------------------------------------------------------

Tom Lane wrote:
> I was thinking a bit about how we pad columns of type NAME to
> fixed-width, even though they're semantically equivalent to C strings.
> The reason for wasting that space is that it makes it possible to
> overlay a C struct onto the leading columns of most system catalogs.
> I don't wish to propose changing that (at least not today), but it
> struck me that there is no reason to overlay a C struct onto index
> entries, and that getting rid of the padding space would be even more
> useful in an index than in the catalog itself.  It turns out to be
> dead easy to implement this: effectively, we just decree that the
> index column storage type for NAME is always CSTRING.  Because the
> two types are effectively binary-compatible as long as you don't
> look at the padding, the attached ugly-but-impressively-short patch
> seems to accomplish this.  It passes the regression tests anyway.
> Here are some numbers about the space savings in a virgin database:
> 
>                                                   CVS HEAD    w/patch savings
> 
> pg_database_size('postgres')                      4439752     4071112 8.3%
> pg_relation_size('pg_class_relname_nsp_index')            57344       40960   
> 28%
> pg_relation_size('pg_proc_proname_args_nsp_index')  319488    204800  35%
> 
> Cutting a third off the size of a system index has got to be worth
> something, but is it worth a hack as ugly as this one?
> 
>                       regards, tom lane
> 
> 

Content-Description: index-name-as-cstring.patch

> Index: src/backend/catalog/index.c
> ===================================================================
> RCS file: /cvsroot/pgsql/src/backend/catalog/index.c,v
> retrieving revision 1.300
> diff -c -r1.300 index.c
> *** src/backend/catalog/index.c       19 Jun 2008 00:46:04 -0000      1.300
> --- src/backend/catalog/index.c       23 Jun 2008 19:34:54 -0000
> ***************
> *** 262,267 ****
> --- 262,278 ----
>   
>                       ReleaseSysCache(tuple);
>               }
> + 
> +             /*
> +              * For an index on NAME, force the index storage to be CSTRING,
> +              * rather than padded to fixed length.
> +              */
> +             if (to->atttypid == NAMEOID)
> +             {
> +                     to->atttypid = CSTRINGOID;
> +                     to->attlen = -2;
> +                     to->attalign = 'c';
> +             }
>       }
>   
>       return indexTupDesc;

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

-- 
  Bruce Momjian  <[EMAIL PROTECTED]>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

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

Reply via email to