mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Convert oidvector and int2vector into variable-length arrays. This
change saves a great deal of space in pg_proc and its primary index, and it eliminates the former requirement that INDEX_MAX_KEYS and FUNC_MAX_ARGS have the same value. INDEX_MAX_KEYS is still embedded in the on-disk representation (because it affects index tuple header size), but FUNC_MAX_ARGS is not. I believe it would now be possible to increase FUNC_MAX_ARGS at little cost, but haven't experimented yet. There are still a lot of vestigial references to FUNC_MAX_ARGS, which I will clean up in a separate pass. However, getting rid of it altogether would require changing the FunctionCallInfoData struct, and I'm not sure I want to buy into that.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<!--
|
||||
Documentation of the system catalogs, directed toward PostgreSQL developers
|
||||
$PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.97 2005/03/27 23:52:51 tgl Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.98 2005/03/29 00:16:49 tgl Exp $
|
||||
-->
|
||||
|
||||
<chapter id="catalogs">
|
||||
@@ -2007,32 +2007,6 @@
|
||||
<entry>The OID of the <structname>pg_class</> entry for the table this index is for</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>indkey</structfield></entry>
|
||||
<entry><type>int2vector</type></entry>
|
||||
<entry><literal><link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.attnum</literal></entry>
|
||||
<entry>
|
||||
This is an array of <structfield>indnatts</structfield> (up to
|
||||
<symbol>INDEX_MAX_KEYS</symbol>) values that indicate which
|
||||
table columns this index indexes. For example a value of
|
||||
<literal>1 3</literal> would mean that the first and the third table
|
||||
columns make up the index key. A zero in this array indicates that the
|
||||
corresponding index attribute is an expression over the table columns,
|
||||
rather than a simple column reference.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>indclass</structfield></entry>
|
||||
<entry><type>oidvector</type></entry>
|
||||
<entry><literal><link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link>.oid</literal></entry>
|
||||
<entry>
|
||||
For each column in the index key this contains the OID of
|
||||
the operator class to use. See
|
||||
<structname>pg_opclass</structname> for details.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>indnatts</structfield></entry>
|
||||
<entry><type>int2</type></entry>
|
||||
@@ -2063,6 +2037,31 @@
|
||||
<entry>If true, the table was last clustered on this index.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>indkey</structfield></entry>
|
||||
<entry><type>int2vector</type></entry>
|
||||
<entry><literal><link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.attnum</literal></entry>
|
||||
<entry>
|
||||
This is an array of <structfield>indnatts</structfield> values that
|
||||
indicate which table columns this index indexes. For example a value
|
||||
of <literal>1 3</literal> would mean that the first and the third table
|
||||
columns make up the index key. A zero in this array indicates that the
|
||||
corresponding index attribute is an expression over the table columns,
|
||||
rather than a simple column reference.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>indclass</structfield></entry>
|
||||
<entry><type>oidvector</type></entry>
|
||||
<entry><literal><link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link>.oid</literal></entry>
|
||||
<entry>
|
||||
For each column in the index key this contains the OID of
|
||||
the operator class to use. See
|
||||
<structname>pg_opclass</structname> for details.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>indexprs</structfield></entry>
|
||||
<entry><type>text</type></entry>
|
||||
@@ -3637,7 +3636,7 @@
|
||||
(<structfield>typlen</structfield> = -1),
|
||||
but some fixed-length (<structfield>typlen</structfield> > 0) types
|
||||
also have nonzero <structfield>typelem</structfield>, for example
|
||||
<type>name</type> and <type>oidvector</type>.
|
||||
<type>name</type> and <type>point</type>.
|
||||
If a fixed-length type has a <structfield>typelem</structfield> then
|
||||
its internal representation must be some number of values of the
|
||||
<structfield>typelem</structfield> data type with no other data.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/trigger.sgml,v 1.41 2005/01/22 22:56:36 momjian Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/trigger.sgml,v 1.42 2005/03/29 00:16:49 tgl Exp $
|
||||
-->
|
||||
|
||||
<chapter id="triggers">
|
||||
@@ -453,7 +453,8 @@ typedef struct Trigger
|
||||
bool tgdeferrable;
|
||||
bool tginitdeferred;
|
||||
int16 tgnargs;
|
||||
int16 tgattr[FUNC_MAX_ARGS];
|
||||
int16 tgnattr;
|
||||
int16 *tgattr;
|
||||
char **tgargs;
|
||||
} Trigger;
|
||||
</programlisting>
|
||||
|
Reference in New Issue
Block a user