More minor updates and copy-editing.
This commit is contained in:
parent
b4b984bccf
commit
81c41e3d0e
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.25 2005/01/05 23:42:02 tgl Exp $
|
||||
-->
|
||||
|
||||
<chapter id="overview">
|
||||
@ -63,11 +63,11 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
<firstterm>system catalogs</firstterm>) to apply to
|
||||
the query tree. It performs the
|
||||
transformations given in the <firstterm>rule bodies</firstterm>.
|
||||
One application of the rewrite system is in the realization of
|
||||
<firstterm>views</firstterm>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
One application of the rewrite system is in the realization of
|
||||
<firstterm>views</firstterm>.
|
||||
Whenever a query against a view
|
||||
(i.e. a <firstterm>virtual table</firstterm>) is made,
|
||||
the rewrite system rewrites the user's query to
|
||||
@ -90,8 +90,8 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
relation to be scanned, there are two paths for the
|
||||
scan. One possibility is a simple sequential scan and the other
|
||||
possibility is to use the index. Next the cost for the execution of
|
||||
each plan is estimated and the
|
||||
cheapest plan is chosen and handed back.
|
||||
each path is estimated and the cheapest path is chosen. The cheapest
|
||||
path is expanded into a complete plan that the executor can use.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
@ -142,7 +142,8 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
<productname>PostgreSQL</productname> protocol described in
|
||||
<xref linkend="protocol">. Many clients are based on the
|
||||
C-language library <application>libpq</>, but several independent
|
||||
implementations exist, such as the Java <application>JDBC</> driver.
|
||||
implementations of the protocol exist, such as the Java
|
||||
<application>JDBC</> driver.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -339,7 +340,7 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
different ways, each of which will produce the same set of
|
||||
results. If it is computationally feasible, the query optimizer
|
||||
will examine each of these possible execution plans, ultimately
|
||||
selecting the execution plan that will run the fastest.
|
||||
selecting the execution plan that is expected to run the fastest.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
@ -355,20 +356,26 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
</note>
|
||||
|
||||
<para>
|
||||
After the cheapest path is determined, a <firstterm>plan tree</>
|
||||
is built to pass to the executor. This represents the desired
|
||||
execution plan in sufficient detail for the executor to run it.
|
||||
The planner's search procedure actually works with data structures
|
||||
called <firstterm>paths</>, which are simply cut-down representations of
|
||||
plans containing only as much information as the planner needs to make
|
||||
its decisions. After the cheapest path is determined, a full-fledged
|
||||
<firstterm>plan tree</> is built to pass to the executor. This represents
|
||||
the desired execution plan in sufficient detail for the executor to run it.
|
||||
In the rest of this section we'll ignore the distinction between paths
|
||||
and plans.
|
||||
</para>
|
||||
|
||||
<sect2>
|
||||
<title>Generating Possible Plans</title>
|
||||
|
||||
<para>
|
||||
The planner/optimizer decides which plans should be generated
|
||||
based upon the types of indexes defined on the relations appearing in
|
||||
a query. There is always the possibility of performing a
|
||||
sequential scan on a relation, so a plan using only
|
||||
sequential scans is always created. Assume an index is defined on a
|
||||
The planner/optimizer starts by generating plans for scanning each
|
||||
individual relation (table) used in the query. The possible plans
|
||||
are determined by the available indexes on each relation.
|
||||
There is always the possibility of performing a
|
||||
sequential scan on a relation, so a sequential scan plan is always
|
||||
created. Assume an index is defined on a
|
||||
relation (for example a B-tree index) and a query contains the
|
||||
restriction
|
||||
<literal>relation.attribute OPR constant</literal>. If
|
||||
@ -395,37 +402,47 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<firstterm>nested loop join</firstterm>: The right relation is scanned
|
||||
once for every row found in the left relation. This strategy
|
||||
is easy to implement but can be very time consuming. (However,
|
||||
if the right relation can be scanned with an index scan, this can
|
||||
be a good strategy. It is possible to use values from the current
|
||||
row of the left relation as keys for the index scan of the right.)
|
||||
<firstterm>nested loop join</firstterm>: The right relation is scanned
|
||||
once for every row found in the left relation. This strategy
|
||||
is easy to implement but can be very time consuming. (However,
|
||||
if the right relation can be scanned with an index scan, this can
|
||||
be a good strategy. It is possible to use values from the current
|
||||
row of the left relation as keys for the index scan of the right.)
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
<firstterm>merge sort join</firstterm>: Each relation is sorted on the join
|
||||
attributes before the join starts. Then the two relations are
|
||||
merged together taking into account that both relations are
|
||||
ordered on the join attributes. This kind of join is more
|
||||
attractive because each relation has to be scanned only once.
|
||||
<firstterm>merge sort join</firstterm>: Each relation is sorted on the join
|
||||
attributes before the join starts. Then the two relations are
|
||||
scanned in parallel, and matching rows are combined to form
|
||||
join rows. This kind of join is more
|
||||
attractive because each relation has to be scanned only once.
|
||||
The required sorting may be achieved either by an explicit sort
|
||||
step, or by scanning the relation in the proper order using an
|
||||
index on the join key.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
<firstterm>hash join</firstterm>: the right relation is first scanned
|
||||
and loaded into a hash table, using its join attributes as hash keys.
|
||||
Next the left relation is scanned and the
|
||||
appropriate values of every row found are used as hash keys to
|
||||
locate the matching rows in the table.
|
||||
<firstterm>hash join</firstterm>: the right relation is first scanned
|
||||
and loaded into a hash table, using its join attributes as hash keys.
|
||||
Next the left relation is scanned and the
|
||||
appropriate values of every row found are used as hash keys to
|
||||
locate the matching rows in the table.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
When the query involves more than two relations, the final result
|
||||
must be built up by a tree of join steps, each with two inputs.
|
||||
The planner examines different possible join sequences to find the
|
||||
cheapest one.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The finished plan tree consists of sequential or index scans of
|
||||
the base relations, plus nested-loop, merge, or hash join nodes as
|
||||
@ -512,7 +529,7 @@ $PostgreSQL: pgsql/doc/src/sgml/arch-dev.sgml,v 2.24 2003/11/29 19:51:36 pgsql E
|
||||
the executor top level uses this information to create a new updated row
|
||||
and mark the old row deleted. For <command>DELETE</>, the only column
|
||||
that is actually returned by the plan is the TID, and the executor top
|
||||
level simply uses the TID to visit the target rows and mark them deleted.
|
||||
level simply uses the TID to visit each target row and mark it deleted.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.13 2005/01/05 23:42:03 tgl Exp $
|
||||
-->
|
||||
|
||||
<chapter id="bki">
|
||||
@ -7,10 +7,11 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
|
||||
<para>
|
||||
Backend Interface (<acronym>BKI</acronym>) files are scripts in a
|
||||
special language that are input to the
|
||||
<productname>PostgreSQL</productname> backend running in the special
|
||||
<quote>bootstrap</quote> mode that allows it to perform database
|
||||
functions without a database system already existing.
|
||||
special language that is understood by the
|
||||
<productname>PostgreSQL</productname> backend when running in the
|
||||
<quote>bootstrap</quote> mode. The bootstrap mode allows system catalogs
|
||||
to be created and filled from scratch, whereas ordinary SQL commands
|
||||
require the catalogs to exist already.
|
||||
<acronym>BKI</acronym> files can therefore be used to create the
|
||||
database system in the first place. (And they are probably not
|
||||
useful for anything else.)
|
||||
@ -21,8 +22,9 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
to do part of its job when creating a new database cluster. The
|
||||
input file used by <application>initdb</application> is created as
|
||||
part of building and installing <productname>PostgreSQL</productname>
|
||||
by a program named <filename>genbki.sh</filename> from some
|
||||
specially formatted C header files in the source tree. The created
|
||||
by a program named <filename>genbki.sh</filename>, which reads some
|
||||
specially formatted C header files in the <filename>src/include/catalog/</>
|
||||
directory of the source tree. The created
|
||||
<acronym>BKI</acronym> file is called <filename>postgres.bki</filename> and is
|
||||
normally installed in the
|
||||
<filename>share</filename> subdirectory of the installation tree.
|
||||
@ -40,9 +42,7 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
This section describes how the <productname>PostgreSQL</productname>
|
||||
backend interprets <acronym>BKI</acronym> files. This description
|
||||
will be easier to understand if the <filename>postgres.bki</filename>
|
||||
file is at hand as an example. You should also study the source
|
||||
code of <application>initdb</application> to get an idea of how the
|
||||
backend is invoked.
|
||||
file is at hand as an example.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -67,6 +67,61 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
<title><acronym>BKI</acronym> Commands</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
create
|
||||
<optional>bootstrap</optional>
|
||||
<optional>shared_relation</optional>
|
||||
<optional>without_oids</optional>
|
||||
<replaceable class="parameter">tablename</replaceable>
|
||||
(<replaceable class="parameter">name1</replaceable> =
|
||||
<replaceable class="parameter">type1</replaceable> <optional>,
|
||||
<replaceable class="parameter">name2</replaceable> = <replaceable
|
||||
class="parameter">type2</replaceable>, ...</optional>)
|
||||
</term>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Create a table named <replaceable
|
||||
class="parameter">tablename</replaceable> with the columns given
|
||||
in parentheses.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following column types are supported directly by
|
||||
<filename>bootstrap.c</>: <type>bool</type>,
|
||||
<type>bytea</type>, <type>char</type> (1 byte),
|
||||
<type>name</type>, <type>int2</type>,
|
||||
<type>int4</type>, <type>regproc</type>, <type>regclass</type>,
|
||||
<type>regtype</type>, <type>text</type>,
|
||||
<type>oid</type>, <type>tid</type>, <type>xid</type>,
|
||||
<type>cid</type>, <type>int2vector</type>, <type>oidvector</type>,
|
||||
<type>_int4</type> (array), <type>_text</type> (array),
|
||||
<type>_aclitem</type> (array). Although it is possible to create
|
||||
tables containing columns of other types, this cannot be done until
|
||||
after <structname>pg_type</> has been created and filled with
|
||||
appropriate entries.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
When <literal>bootstrap</> is specified,
|
||||
the table will only be created on disk; nothing is entered into
|
||||
<structname>pg_class</structname>,
|
||||
<structname>pg_attribute</structname>, etc, for it. Thus the
|
||||
table will not be accessible by ordinary SQL operations until
|
||||
such entries are made the hard way (with <literal>insert</>
|
||||
commands). This option is used for creating
|
||||
<structname>pg_class</structname> etc themselves.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The table is created as shared if <literal>shared_relation</> is
|
||||
specified.
|
||||
It will have OIDs unless <literal>without_oids</> is specified.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
open <replaceable class="parameter">tablename</replaceable>
|
||||
@ -98,51 +153,6 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
create <replaceable class="parameter">tablename</replaceable>
|
||||
(<replaceable class="parameter">name1</replaceable> =
|
||||
<replaceable class="parameter">type1</replaceable> <optional>,
|
||||
<replaceable class="parameter">name2</replaceable> = <replaceable
|
||||
class="parameter">type2</replaceable>, ...</optional>)
|
||||
</term>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Create a table named <replaceable
|
||||
class="parameter">tablename</replaceable> with the columns given
|
||||
in parentheses.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <replaceable>type</replaceable> is not necessarily the data
|
||||
type that the column will have in the SQL environment; that is
|
||||
determined by the <structname>pg_attribute</structname> system
|
||||
catalog. The type here is essentially only used to allocate
|
||||
storage. The following types are allowed: <type>bool</type>,
|
||||
<type>bytea</type>, <type>char</type> (1 byte),
|
||||
<type>name</type>, <type>int2</type>, <type>int2vector</type>,
|
||||
<type>int4</type>, <type>regproc</type>, <type>regclass</type>,
|
||||
<type>regtype</type>, <type>text</type>,
|
||||
<type>oid</type>, <type>tid</type>, <type>xid</type>,
|
||||
<type>cid</type>, <type>oidvector</type>, <type>smgr</type>,
|
||||
<type>_int4</type> (array), <type>_aclitem</type> (array).
|
||||
Array types can also be indicated by writing
|
||||
<literal>[]</literal> after the name of the element type.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
The table will only be created on disk, it will not
|
||||
automatically be registered in the system catalogs and will
|
||||
therefore not be accessible unless appropriate rows are
|
||||
inserted in <structname>pg_class</structname>,
|
||||
<structname>pg_attribute</structname>, etc.
|
||||
</para>
|
||||
</note>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
insert <optional>OID = <replaceable class="parameter">oid_value</replaceable></optional> (<replaceable class="parameter">value1</replaceable> <replaceable class="parameter">value2</replaceable> ...)
|
||||
@ -190,6 +200,8 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
classes to use are <replaceable
|
||||
class="parameter">opclass1</replaceable>, <replaceable
|
||||
class="parameter">opclass2</replaceable> etc., respectively.
|
||||
The index file is created and appropriate catalog entries are
|
||||
made for it, but the index contents are not initialized by this command.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@ -199,7 +211,7 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Build the indices that have previously been declared.
|
||||
Fill in the indices that have previously been declared.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@ -212,7 +224,7 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.12 2003/11/29 19:51:36 pgsql Exp $
|
||||
|
||||
<para>
|
||||
The following sequence of commands will create the
|
||||
<literal>test_table</literal> table with the two columns
|
||||
table <literal>test_table</literal> with two columns
|
||||
<literal>cola</literal> and <literal>colb</literal> of type
|
||||
<type>int4</type> and <type>text</type>, respectively, and insert
|
||||
two rows into the table.
|
||||
|
@ -1,6 +1,6 @@
|
||||
<!--
|
||||
Documentation of the system catalogs, directed toward PostgreSQL developers
|
||||
$PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.94 2004/12/13 18:05:07 petere Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.95 2005/01/05 23:42:03 tgl Exp $
|
||||
-->
|
||||
|
||||
<chapter id="catalogs">
|
||||
@ -33,7 +33,7 @@
|
||||
Most system catalogs are copied from the template database during
|
||||
database creation and are thereafter database-specific. A few
|
||||
catalogs are physically shared across all databases in a cluster;
|
||||
these are marked in the descriptions of the individual catalogs.
|
||||
these are noted in the descriptions of the individual catalogs.
|
||||
</para>
|
||||
|
||||
<table id="catalog-table">
|
||||
@ -85,7 +85,7 @@
|
||||
|
||||
<row>
|
||||
<entry><link linkend="catalog-pg-class"><structname>pg_class</structname></link></entry>
|
||||
<entry>tables, indexes, sequences (<quote>relations</quote>)</entry>
|
||||
<entry>tables, indexes, sequences, views (<quote>relations</quote>)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -663,6 +663,14 @@
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
The <structfield>adsrc</structfield> field is historical, and is best
|
||||
not used, because it does not track outside changes that might affect
|
||||
the representation of the default value. Reverse-compiling the
|
||||
<structfield>adbin</structfield> field (with <function>pg_get_expr</> for
|
||||
example) is a better way to display the default value.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
|
||||
@ -678,7 +686,8 @@
|
||||
table columns. There will be exactly one
|
||||
<structname>pg_attribute</structname> row for every column in every
|
||||
table in the database. (There will also be attribute entries for
|
||||
indexes and other objects. See <structname>pg_class</structname>.)
|
||||
indexes, and indeed all objects that have <structname>pg_class</structname>
|
||||
entries.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -728,7 +737,7 @@
|
||||
<entry>
|
||||
<structfield>attstattarget</structfield> controls the level of detail
|
||||
of statistics accumulated for this column by
|
||||
<command>ANALYZE</command>.
|
||||
<xref linkend="sql-analyze" endterm="sql-analyze-title">.
|
||||
A zero value indicates that no statistics should be collected.
|
||||
A negative value says to use the system default statistics target.
|
||||
The exact meaning of positive values is data type-dependent.
|
||||
@ -878,6 +887,17 @@
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
In a dropped column's <structname>pg_attribute</structname> entry,
|
||||
<structfield>atttypid</structfield> is reset to zero, but
|
||||
<structfield>attlen</structfield> and the other fields copied from
|
||||
<structname>pg_type</> are still valid. This arrangement is needed
|
||||
to cope with the situation where the dropped column's data type was
|
||||
later dropped, and so there is no <structname>pg_type</> row anymore.
|
||||
<structfield>attlen</structfield> and the other fields can be used
|
||||
to interpret the contents of a row of the table.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
|
||||
@ -1230,8 +1250,8 @@
|
||||
<entry><structfield>relhasrules</structfield></entry>
|
||||
<entry><type>bool</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Table has rules; see
|
||||
<structname>pg_rewrite</structname> catalog
|
||||
<entry>True if table has rules; see
|
||||
<structname>pg_rewrite</structname> catalog.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
@ -1239,7 +1259,7 @@
|
||||
<entry><structfield>relhassubclass</structfield></entry>
|
||||
<entry><type>bool</type></entry>
|
||||
<entry></entry>
|
||||
<entry>At least one table inherits from this one</entry>
|
||||
<entry>True if table has (or once had) any inheritance children.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -1247,9 +1267,10 @@
|
||||
<entry><type>aclitem[]</type></entry>
|
||||
<entry></entry>
|
||||
<entry>
|
||||
Access privileges; see the descriptions of
|
||||
<command>GRANT</command> and <command>REVOKE</command> for
|
||||
details.
|
||||
Access privileges; see
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">
|
||||
for details.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
@ -1432,8 +1453,10 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_conversion</structname> stores encoding conversion information. See
|
||||
<command>CREATE CONVERSION</command> for more information.
|
||||
The catalog <structname>pg_conversion</structname> describes the
|
||||
available encoding conversion procedures. See
|
||||
<xref linkend="sql-createconversion" endterm="sql-createconversion-title">
|
||||
for more information.
|
||||
</para>
|
||||
|
||||
<table>
|
||||
@ -1643,7 +1666,12 @@
|
||||
<entry><structfield>datacl</structfield></entry>
|
||||
<entry><type>aclitem[]</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Access privileges</entry>
|
||||
<entry>
|
||||
Access privileges; see
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">
|
||||
for details.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -1827,8 +1855,8 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_description</> can store an optional description or
|
||||
comment for each database object. Descriptions can be manipulated
|
||||
The catalog <structname>pg_description</> stores optional descriptions
|
||||
(comments) for each database object. Descriptions can be manipulated
|
||||
with the <command>COMMENT</command> command and viewed with
|
||||
<application>psql</application>'s <literal>\d</literal> commands.
|
||||
Descriptions of many built-in system objects are provided in the initial
|
||||
@ -2081,7 +2109,9 @@
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_inherits</> records information about
|
||||
table inheritance hierarchies.
|
||||
table inheritance hierarchies. There is one entry for each direct
|
||||
child table in the database. (Indirect inheritance can be determined
|
||||
by following chains of entries.)
|
||||
</para>
|
||||
|
||||
<table>
|
||||
@ -2121,7 +2151,7 @@
|
||||
<entry><type>int4</type></entry>
|
||||
<entry></entry>
|
||||
<entry>
|
||||
If there is more than one parent for a child table (multiple
|
||||
If there is more than one direct parent for a child table (multiple
|
||||
inheritance), this number tells the order in which the
|
||||
inherited columns are to be arranged. The count starts at 1.
|
||||
</entry>
|
||||
@ -2141,10 +2171,10 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_language</structname> registers call interfaces or
|
||||
The catalog <structname>pg_language</structname> registers
|
||||
languages in which you can write functions or stored procedures.
|
||||
See under <command>CREATE LANGUAGE</command> and in
|
||||
<xref linkend="xplang"> for more information about language handlers.
|
||||
See <xref linkend="sql-createlanguage" endterm="sql-createlanguage-title">
|
||||
and <xref linkend="xplang"> for more information about language handlers.
|
||||
</para>
|
||||
|
||||
<table>
|
||||
@ -2165,7 +2195,7 @@
|
||||
<entry><structfield>lanname</structfield></entry>
|
||||
<entry><type>name</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Name of the language (to be specified when creating a function)</entry>
|
||||
<entry>Name of the language</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -2186,8 +2216,7 @@
|
||||
<entry><type>bool</type></entry>
|
||||
<entry></entry>
|
||||
<entry>
|
||||
This is a trusted language. See under <command>CREATE
|
||||
LANGUAGE</command> what this means. If this is an internal
|
||||
This is a trusted language. If this is an internal
|
||||
language (<structfield>lanispl</structfield> is false) then
|
||||
this column is meaningless.
|
||||
</entry>
|
||||
@ -2212,8 +2241,7 @@
|
||||
<entry>
|
||||
This references a language validator function that is responsible
|
||||
for checking the syntax and validity of new functions when they
|
||||
are created. See under <command>CREATE LANGUAGE</command> for
|
||||
further information about validators.
|
||||
are created. Zero if no validator is provided.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
@ -2221,7 +2249,12 @@
|
||||
<entry><structfield>lanacl</structfield></entry>
|
||||
<entry><type>aclitem[]</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Access privileges</entry>
|
||||
<entry>
|
||||
Access privileges; see
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">
|
||||
for details.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -2309,8 +2342,10 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_listener</structname> supports the <command>LISTEN</>
|
||||
and <command>NOTIFY</> commands. A listener creates an entry in
|
||||
The catalog <structname>pg_listener</structname> supports the
|
||||
<xref linkend="sql-listen" endterm="sql-listen-title"> and
|
||||
<xref linkend="sql-notify" endterm="sql-notify-title">
|
||||
commands. A listener creates an entry in
|
||||
<structname>pg_listener</structname> for each notification name
|
||||
it is listening for. A notifier scans <structname>pg_listener</structname>
|
||||
and updates each matching entry to show that a notification has occurred.
|
||||
@ -2410,7 +2445,12 @@
|
||||
<entry><structfield>nspacl</structfield></entry>
|
||||
<entry><type>aclitem[]</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Access privileges</entry>
|
||||
<entry>
|
||||
Access privileges; see
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">
|
||||
for details.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -2528,9 +2568,9 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_operator</> stores information about operators. See
|
||||
<command>CREATE OPERATOR</command> and <xref linkend="xoper"> for
|
||||
details on these operator parameters.
|
||||
The catalog <structname>pg_operator</> stores information about operators.
|
||||
See <xref linkend="sql-createoperator" endterm="sql-createoperator-title">
|
||||
and <xref linkend="xoper"> for more information.
|
||||
</para>
|
||||
|
||||
<table>
|
||||
@ -2703,9 +2743,8 @@
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_proc</> stores information about functions (or procedures).
|
||||
The description of <command>CREATE FUNCTION</command> and
|
||||
<xref linkend="xfunc"> contain more information about the meaning of
|
||||
some columns.
|
||||
See <xref linkend="sql-createfunction" endterm="sql-createfunction-title">
|
||||
and <xref linkend="xfunc"> for more information.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -2869,16 +2908,21 @@
|
||||
<entry><structfield>proacl</structfield></entry>
|
||||
<entry><type>aclitem[]</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Access privileges</entry>
|
||||
<entry>
|
||||
Access privileges; see
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">
|
||||
for details.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
For compiled functions, both built-in and dynamically loaded,
|
||||
<structfield>prosrc</structfield> contains the function's C-language
|
||||
name (link symbol) for compiled functions, both built-in and
|
||||
dynamically loaded. For all other language types,
|
||||
name (link symbol). For all other currently-known language types,
|
||||
<structfield>prosrc</structfield> contains the function's source
|
||||
text. <structfield>probin</structfield> is unused except for
|
||||
dynamically-loaded C functions, for which it gives the name of the
|
||||
@ -3041,7 +3085,7 @@
|
||||
<entry><structfield>usesysid</structfield></entry>
|
||||
<entry><type>int4</type></entry>
|
||||
<entry></entry>
|
||||
<entry>User id (arbitrary number used to reference this user)</entry>
|
||||
<entry>User ID (arbitrary number used to reference this user)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -3072,14 +3116,14 @@
|
||||
<entry><structfield>passwd</structfield></entry>
|
||||
<entry><type>text</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Password</entry>
|
||||
<entry>Password (possibly encrypted)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><structfield>valuntil</structfield></entry>
|
||||
<entry><type>abstime</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Account expiry time (only used for password authentication)</entry>
|
||||
<entry>Password expiry time (only used for password authentication)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -3311,7 +3355,12 @@
|
||||
<entry><structfield>spcacl</structfield></entry>
|
||||
<entry><type>aclitem[]</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Access privileges</entry>
|
||||
<entry>
|
||||
Access privileges; see
|
||||
<xref linkend="sql-grant" endterm="sql-grant-title"> and
|
||||
<xref linkend="sql-revoke" endterm="sql-revoke-title">
|
||||
for details.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -3327,8 +3376,9 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_trigger</structname> stores triggers on tables. See under
|
||||
<command>CREATE TRIGGER</command> for more information.
|
||||
The catalog <structname>pg_trigger</structname> stores triggers on tables.
|
||||
See <xref linkend="sql-createtrigger" endterm="sql-createtrigger-title">
|
||||
for more information.
|
||||
</para>
|
||||
|
||||
<table>
|
||||
@ -3443,8 +3493,8 @@
|
||||
|
||||
<note>
|
||||
<para>
|
||||
<literal>pg_class.reltriggers</literal> needs to match up with the
|
||||
entries in this table.
|
||||
<literal>pg_class.reltriggers</literal> needs to agree with the
|
||||
number of triggers found in this table for the given relation.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
@ -3459,12 +3509,14 @@
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
The catalog <structname>pg_type</structname> stores information about data types. Base types
|
||||
(scalar types) are created with <command>CREATE TYPE</command>.
|
||||
The catalog <structname>pg_type</structname> stores information about data
|
||||
types. Base types (scalar types) are created with
|
||||
<xref linkend="sql-createtype" endterm="sql-createtype-title">, and
|
||||
domains with
|
||||
<xref linkend="sql-createdomain" endterm="sql-createdomain-title">.
|
||||
A composite type is automatically created for each table in the database, to
|
||||
represent the row structure of the table. It is also possible to create
|
||||
composite types with <command>CREATE TYPE AS</command> and
|
||||
domains with <command>CREATE DOMAIN</command>.
|
||||
composite types with <command>CREATE TYPE AS</command>.
|
||||
</para>
|
||||
|
||||
<table>
|
||||
@ -3797,17 +3849,9 @@
|
||||
|
||||
<para>
|
||||
In addition to the system catalogs, <productname>PostgreSQL</productname>
|
||||
provides a number of built-in views. The system views provide convenient
|
||||
access to some commonly used queries on the system catalogs. Some of these
|
||||
views provide access to internal server state, as well.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<xref linkend="view-table"> lists the system views described here.
|
||||
More detailed documentation of each view follows below.
|
||||
There are some additional views that provide access to the results of
|
||||
the statistics collector; they are described in <xref
|
||||
linkend="monitoring-stats-views-table">.
|
||||
provides a number of built-in views. Some system views provide convenient
|
||||
access to some commonly used queries on the system catalogs. Other views
|
||||
provide access to internal server state.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -3819,6 +3863,14 @@
|
||||
the information you need.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<xref linkend="view-table"> lists the system views described here.
|
||||
More detailed documentation of each view follows below.
|
||||
There are some additional views that provide access to the results of
|
||||
the statistics collector; they are described in <xref
|
||||
linkend="monitoring-stats-views-table">.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Except where noted, all the views described here are read-only.
|
||||
</para>
|
||||
@ -4398,7 +4450,7 @@
|
||||
and <structfield>histogram_bounds</> arrays can be set on a
|
||||
column-by-column basis using the <command>ALTER TABLE SET STATISTICS</>
|
||||
command, or globally by setting the
|
||||
<varname>default_statistics_target</varname> runtime parameter.
|
||||
<xref linkend="guc-default-statistics-target"> runtime parameter.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
@ -4515,7 +4567,7 @@
|
||||
<entry><structfield>usesysid</structfield></entry>
|
||||
<entry><type>int4</type></entry>
|
||||
<entry></entry>
|
||||
<entry>User id (arbitrary number used to reference this user)</entry>
|
||||
<entry>User ID (arbitrary number used to reference this user)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -4553,7 +4605,7 @@
|
||||
<entry><structfield>valuntil</structfield></entry>
|
||||
<entry><type>abstime</type></entry>
|
||||
<entry></entry>
|
||||
<entry>Account expiry time (only used for password authentication)</entry>
|
||||
<entry>Password expiry time (only used for password authentication)</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/geqo.sgml,v 1.26 2003/11/29 19:51:37 pgsql Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/geqo.sgml,v 1.27 2005/01/05 23:42:03 tgl Exp $
|
||||
Genetic Optimizer
|
||||
-->
|
||||
|
||||
@ -65,8 +65,7 @@ Genetic Optimizer
|
||||
enormous amount of time and memory space when the number of joins
|
||||
in the query grows large. This makes the ordinary
|
||||
<productname>PostgreSQL</productname> query optimizer
|
||||
inappropriate for database application domains that involve the
|
||||
need for extensive queries, such as artificial intelligence.
|
||||
inappropriate for queries that join a large number of tables.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -97,7 +96,7 @@ Genetic Optimizer
|
||||
<para>
|
||||
The genetic algorithm (<acronym>GA</acronym>) is a heuristic optimization method which
|
||||
operates through
|
||||
determined, randomized search. The set of possible solutions for the
|
||||
nondeterministic, randomized search. The set of possible solutions for the
|
||||
optimization problem is considered as a
|
||||
<firstterm>population</firstterm> of <firstterm>individuals</firstterm>.
|
||||
The degree of adaptation of an individual to its environment is specified
|
||||
@ -176,11 +175,12 @@ Genetic Optimizer
|
||||
<title>Genetic Query Optimization (<acronym>GEQO</acronym>) in PostgreSQL</title>
|
||||
|
||||
<para>
|
||||
The <acronym>GEQO</acronym> module is intended for the solution of the query
|
||||
optimization problem similar to a traveling salesman problem (<acronym>TSP</acronym>).
|
||||
The <acronym>GEQO</acronym> module approaches the query
|
||||
optimization problem as though it were the well-known traveling salesman
|
||||
problem (<acronym>TSP</acronym>).
|
||||
Possible query plans are encoded as integer strings. Each string
|
||||
represents the join order from one relation of the query to the next.
|
||||
E. g., the query tree
|
||||
For example, the join tree
|
||||
<literallayout class="monospaced">
|
||||
/\
|
||||
/\ 2
|
||||
@ -245,29 +245,39 @@ Genetic Optimizer
|
||||
<para>
|
||||
Work is still needed to improve the genetic algorithm parameter
|
||||
settings.
|
||||
In file <filename>backend/optimizer/geqo/geqo_params.c</filename>, routines
|
||||
In file <filename>src/backend/optimizer/geqo/geqo_main.c</filename>,
|
||||
routines
|
||||
<function>gimme_pool_size</function> and <function>gimme_number_generations</function>,
|
||||
we have to find a compromise for the parameter settings
|
||||
to satisfy two competing demands:
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
Optimality of the query plan
|
||||
</para>
|
||||
<para>
|
||||
Optimality of the query plan
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Computing time
|
||||
</para>
|
||||
<para>
|
||||
Computing time
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
At a more basic level, it is not clear that solving query optimization
|
||||
with a GA algorithm designed for TSP is appropriate. In the TSP case,
|
||||
the cost associated with any substring (partial tour) is independent
|
||||
of the rest of the tour, but this is certainly not true for query
|
||||
optimization. Thus it is questionable whether edge recombination
|
||||
crossover is the most effective mutation procedure.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="geqo-biblio">
|
||||
<title>Further Readings</title>
|
||||
<title>Further Reading</title>
|
||||
|
||||
<para>
|
||||
The following resources contain additional information about
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$PostgreSQL: pgsql/doc/src/sgml/plhandler.sgml,v 1.3 2004/12/30 21:45:36 tgl Exp $
|
||||
$PostgreSQL: pgsql/doc/src/sgml/plhandler.sgml,v 1.4 2005/01/05 23:42:03 tgl Exp $
|
||||
-->
|
||||
|
||||
<chapter id="plhandler">
|
||||
@ -56,11 +56,11 @@ $PostgreSQL: pgsql/doc/src/sgml/plhandler.sgml,v 1.3 2004/12/30 21:45:36 tgl Exp
|
||||
system table
|
||||
<classname>pg_proc</classname> and to analyze the argument
|
||||
and return types of the called function. The <literal>AS</> clause from the
|
||||
<command>CREATE FUNCTION</command> of the function will be found
|
||||
<command>CREATE FUNCTION</command> command for the function will be found
|
||||
in the <literal>prosrc</literal> column of the
|
||||
<classname>pg_proc</classname> row. This may be the source
|
||||
text in the procedural language itself (like for PL/Tcl), a
|
||||
path name to a file, or anything else that tells the call handler
|
||||
<classname>pg_proc</classname> row. This is commonly source
|
||||
text in the procedural language, but in theory it could be something else,
|
||||
such as a path name to a file, or anything else that tells the call handler
|
||||
what to do in detail.
|
||||
</para>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user