Fixups in content and markup for 7.0 release.
This commit is contained in:
parent
a6894eb81a
commit
45f79cae14
|
@ -8,7 +8,7 @@
|
|||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/doc/src/sgml/Makefile,v 1.13 2000/01/14 22:11:31 petere Exp $
|
||||
# $Header: /cvsroot/pgsql/doc/src/sgml/Makefile,v 1.14 2000/05/02 20:01:51 thomas Exp $
|
||||
#
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
@ -67,17 +67,18 @@ vpath %.sgml ./ref
|
|||
|
||||
MANSOURCES= $(wildcard ref/*.sgml)
|
||||
|
||||
APPLICATIONS= createdb.sgml createuser.sgml \
|
||||
createlang.sgml \
|
||||
dropdb.sgml dropuser.sgml \
|
||||
droplang.sgml \
|
||||
APPLICATIONS= createdb.sgml createlang.sgml createuser.sgml \
|
||||
dropdb.sgml droplang.sgml dropuser.sgml \
|
||||
ecpg-ref.sgml \
|
||||
initdb.sgml initlocation.sgml \
|
||||
ipcclean.sgml \
|
||||
pg_dump.sgml \
|
||||
pg_dumpall.sgml \
|
||||
pg_passwd.sgml \
|
||||
pg_upgrade.sgml \
|
||||
pgaccess-ref.sgml \
|
||||
pgadmin-ref.sgml \
|
||||
pgctl-ref.sgml \
|
||||
pgtclsh.sgml \
|
||||
pgtksh.sgml \
|
||||
postgres-ref.sgml \
|
||||
|
@ -87,8 +88,9 @@ APPLICATIONS= createdb.sgml createuser.sgml \
|
|||
|
||||
COMMANDS= abort.sgml alter_group.sgml alter_table.sgml alter_user.sgml \
|
||||
begin.sgml \
|
||||
close.sgml cluster.sgml commit.sgml copy.sgml \
|
||||
create_aggregate.sgml create_database.sgml create_function.sgml create_group.sgml \
|
||||
close.sgml cluster.sgml comment.sgml commit.sgml copy.sgml \
|
||||
create_aggregate.sgml create_constraint.sgml create_database.sgml \
|
||||
create_function.sgml create_group.sgml \
|
||||
create_index.sgml \
|
||||
create_language.sgml create_operator.sgml create_rule.sgml create_sequence.sgml \
|
||||
create_table.sgml create_table_as.sgml create_trigger.sgml create_type.sgml \
|
||||
|
@ -98,12 +100,12 @@ COMMANDS= abort.sgml alter_group.sgml alter_table.sgml alter_user.sgml \
|
|||
drop_index.sgml \
|
||||
drop_language.sgml drop_operator.sgml drop_rule.sgml drop_sequence.sgml \
|
||||
drop_table.sgml drop_trigger.sgml drop_type.sgml drop_user.sgml drop_view.sgml \
|
||||
explain.sgml fetch.sgml grant.sgml \
|
||||
end.sgml explain.sgml fetch.sgml grant.sgml \
|
||||
insert.sgml listen.sgml load.sgml lock.sgml move.sgml \
|
||||
notify.sgml \
|
||||
reset.sgml revoke.sgml rollback.sgml \
|
||||
reindex.sgml reset.sgml revoke.sgml rollback.sgml \
|
||||
select.sgml select_into.sgml set.sgml show.sgml \
|
||||
unlisten.sgml update.sgml vacuum.sgml
|
||||
truncate.sgml unlisten.sgml update.sgml vacuum.sgml
|
||||
|
||||
FUNCTIONS= current_date.sgml current_time.sgml current_timestamp.sgml current_user.sgml
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/admin.sgml,v 1.21 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/admin.sgml,v 1.22 2000/05/02 20:01:51 thomas Exp $
|
||||
|
||||
Postgres Administrator's Guide.
|
||||
Derived from postgres.sgml.
|
||||
|
@ -34,27 +34,27 @@ Derived from postgres.sgml.
|
|||
<!entity biblio SYSTEM "biblio.sgml">
|
||||
]>
|
||||
|
||||
<Book Id="admin">
|
||||
<book id="admin">
|
||||
|
||||
<!-- Title information -->
|
||||
|
||||
<Title>PostgreSQL Administrator's Guide</Title>
|
||||
<BookInfo>
|
||||
<ReleaseInfo>Covering v6.5 for general release</ReleaseInfo>
|
||||
<BookBiblio>
|
||||
<AuthorGroup>
|
||||
<CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
|
||||
</AuthorGroup>
|
||||
<title>PostgreSQL Administrator's Guide</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v7.0 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
</authorgroup>
|
||||
<!-- editor in authorgroup is not supported
|
||||
<AuthorGroup>
|
||||
-->
|
||||
<Editor>
|
||||
<FirstName>Thomas</FirstName>
|
||||
<SurName>Lockhart</SurName>
|
||||
<Affiliation>
|
||||
<OrgName>Caltech/JPL</OrgName>
|
||||
</Affiliation>
|
||||
</Editor>
|
||||
<editor>
|
||||
<firstname>Thomas</firstname>
|
||||
<surname>Lockhart</surname>
|
||||
<affiliation>
|
||||
<orgname>Caltech/JPL</orgname>
|
||||
</affiliation>
|
||||
</editor>
|
||||
<!--
|
||||
</AuthorGroup>
|
||||
-->
|
||||
|
@ -63,17 +63,17 @@ Derived from postgres.sgml.
|
|||
<AuthorInitials>TGL</AuthorInitials>
|
||||
-->
|
||||
|
||||
<Date>(last updated 1999-06-01)</Date>
|
||||
</BookBiblio>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<LegalNotice>
|
||||
<Para>
|
||||
<ProductName>PostgreSQL</ProductName> is Copyright © 1996-9
|
||||
by the Postgres Global Development Group.
|
||||
</Para>
|
||||
</LegalNotice>
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
</BookInfo>
|
||||
</bookinfo>
|
||||
|
||||
<!--
|
||||
<TOC> </TOC>
|
||||
|
@ -88,20 +88,20 @@ Your name here...
|
|||
</Dedication>
|
||||
-->
|
||||
|
||||
<Preface id="preface">
|
||||
<Title>Summary</Title>
|
||||
<preface id="preface">
|
||||
<title>Summary</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName>,
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<ProductName>PostgreSQL</ProductName> is an open-source descendant
|
||||
<productname>PostgreSQL</productname> is an open-source descendant
|
||||
of this original Berkeley code.
|
||||
</Para>
|
||||
</Preface>
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
&intro-ag;
|
||||
|
||||
|
@ -128,7 +128,7 @@ Don't bother with an index until we get some index entries.
|
|||
</index>
|
||||
-->
|
||||
|
||||
</Book>
|
||||
</book>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/advanced.sgml,v 1.11 2000/04/11 05:39:06 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/advanced.sgml,v 1.12 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="advanced">
|
||||
|
@ -103,12 +103,12 @@ SELECT c.name, c.altitude
|
|||
+----------+----------+
|
||||
</programlisting>
|
||||
|
||||
Here the <quote>*</quote> after cities indicates that the query should
|
||||
Here the "*" after cities indicates that the query should
|
||||
be run over cities and all classes below cities in the
|
||||
inheritance hierarchy. Many of the commands that we
|
||||
have already discussed (<command>SELECT</command>,
|
||||
<command>UPDATE</command> and <command>DELETE</command>)
|
||||
support this <quote>*</quote> notation, as do others, like
|
||||
support this inheritance notation using "*" as do other commands like
|
||||
<command>ALTER</command>.
|
||||
</para>
|
||||
</sect1>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.13 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<bibliography id="biblio">
|
||||
|
@ -15,7 +15,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thom
|
|||
<productname>Postgres</productname> development team
|
||||
are available at
|
||||
<ulink url="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/">
|
||||
http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/</ulink>
|
||||
the University of California, Berkeley, Computer Science
|
||||
Department web site</ulink>
|
||||
</para>
|
||||
|
||||
<bibliodiv>
|
||||
|
@ -235,7 +236,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thom
|
|||
<surname>Lockhart</surname>
|
||||
</editor>
|
||||
|
||||
<pubdate>1998-10-01</pubdate>
|
||||
<pubdate>2000-05-01</pubdate>
|
||||
<publisher>
|
||||
<publishername>The PostgreSQL Global Development Group</publishername>
|
||||
</publisher>
|
||||
|
@ -261,7 +262,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thom
|
|||
<surname>Lockhart</surname>
|
||||
</editor>
|
||||
|
||||
<pubdate>1998-10-01</pubdate>
|
||||
<pubdate>2000-05-01</pubdate>
|
||||
<publisher>
|
||||
<publishername>The PostgreSQL Global Development Group</publishername>
|
||||
</publisher>
|
||||
|
@ -287,7 +288,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thom
|
|||
<surname>Lockhart</surname>
|
||||
</editor>
|
||||
|
||||
<pubdate>1998-10-01</pubdate>
|
||||
<pubdate>2000-05-01</pubdate>
|
||||
<publisher>
|
||||
<publishername>The PostgreSQL Global Development Group</publishername>
|
||||
</publisher>
|
||||
|
@ -313,7 +314,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thom
|
|||
<surname>Lockhart</surname>
|
||||
</editor>
|
||||
|
||||
<pubdate>1998-10-01</pubdate>
|
||||
<pubdate>2000-05-01</pubdate>
|
||||
<publisher>
|
||||
<publishername>The PostgreSQL Global Development Group</publishername>
|
||||
</publisher>
|
||||
|
@ -339,7 +340,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/biblio.sgml,v 1.12 2000/03/31 03:27:40 thom
|
|||
<surname>Lockhart</surname>
|
||||
</editor>
|
||||
|
||||
<pubdate>1998-10-01</pubdate>
|
||||
<pubdate>2000-05-01</pubdate>
|
||||
<publisher>
|
||||
<publishername>The PostgreSQL Global Development Group</publishername>
|
||||
</publisher>
|
||||
|
@ -585,6 +586,7 @@ http://simon.cs.cornell.edu/home/praveen/papers/partindex.de95.ps.Z
|
|||
</ulink>
|
||||
</title>
|
||||
<titleabbrev id="SESHADRI95">
|
||||
Seshardri, 1995
|
||||
</titleabbrev>
|
||||
<authorgroup>
|
||||
<author>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/bki.sgml,v 1.2 1998/12/29 02:24:13 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/bki.sgml,v 1.3 2000/05/02 20:01:51 thomas Exp $
|
||||
|
||||
Transcribed from the original bki.man.5 documentation
|
||||
- Thomas Lockhart 1998-08-03
|
||||
|
@ -37,25 +37,28 @@ Related information may be found in documentation for
|
|||
and the <acronym>SQL</acronym> command <command>CREATE DATABASE</command>.
|
||||
</para>
|
||||
|
||||
<sect1>
|
||||
<title><acronym>BKI</acronym> File Format</title>
|
||||
<sect1>
|
||||
<title><acronym>BKI</acronym> File Format</title>
|
||||
|
||||
<para>
|
||||
The <productname>Postgres</productname> backend interprets <acronym>BKI</acronym> files as described below. This
|
||||
description will be easier to understand if the <filename>global1.bki.source</filename> file is
|
||||
at hand as an example. (As explained above, this .source file isn't quite
|
||||
a <acronym>BKI</acronym> file, but you'll be able to guess what the resulting <acronym>BKI</acronym> file would be
|
||||
anyway).
|
||||
</para>
|
||||
<para>
|
||||
The <productname>Postgres</productname> backend interprets
|
||||
<acronym>BKI</acronym> files as described below. This
|
||||
description will be easier to understand if the
|
||||
<filename>global1.bki.source</filename> file is
|
||||
at hand as an example. (As explained above, this .source file isn't quite
|
||||
a <acronym>BKI</acronym> file, but you'll be able to guess what
|
||||
the resulting <acronym>BKI</acronym> file would be
|
||||
anyway).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Commands are composed of a command name followed by space separated
|
||||
arguments. Arguments to a command which begin with a <quote>$</quote> are
|
||||
treated specially. If <quote>$$</quote> are the first two characters, then
|
||||
the first <quote>$</quote> is ignored and the argument is then processed
|
||||
normally. If the <quote>$</quote> is followed by space, then it is treated
|
||||
arguments. Arguments to a command which begin with a "$" are
|
||||
treated specially. If "$$" are the first two characters, then
|
||||
the first "$" is ignored and the argument is then processed
|
||||
normally. If the "$" is followed by space, then it is treated
|
||||
as a NULL
|
||||
value. Otherwise, the characters following the <quote>$</quote> are
|
||||
value. Otherwise, the characters following the "$" are
|
||||
interpreted as the name of a macro causing the argument to be replaced
|
||||
with the macro's value. It is an error for this macro to be
|
||||
undefined.
|
||||
|
@ -137,7 +140,7 @@ etc., for its attribute values and
|
|||
<replaceable class="parameter">oid_value</replaceable>
|
||||
for its OID. If
|
||||
<replaceable class="parameter">oid_value</replaceable>
|
||||
is not <quote>0</quote>, then this value will be used as the instance's
|
||||
is not zero (0), then this value will be used as the instance's
|
||||
object identifier. Otherwise, it is an error.
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -398,7 +401,7 @@ to
|
|||
<title>Example</title>
|
||||
|
||||
<para>
|
||||
The following set of commands will create the <quote>pg_opclass</quote>
|
||||
The following set of commands will create the <literal>pg_opclass</literal>
|
||||
class containing the
|
||||
<parameter>int_ops</parameter>
|
||||
collection as an object with an OID of
|
||||
|
@ -414,3 +417,20 @@ close pg_opclass
|
|||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,21 +1,23 @@
|
|||
<chapter id="config">
|
||||
<title id="install-config">Configuration Options</title>
|
||||
<chapter>
|
||||
<title>Configuration Options</title>
|
||||
|
||||
<sect1>
|
||||
<title>Parameters for Configuration (<application>configure</application>)</title>
|
||||
<sect1>
|
||||
<title>Parameters for Configuration
|
||||
(<application>configure</application>)</title>
|
||||
|
||||
<para>
|
||||
The full set of parameters available in <application>configure</application>
|
||||
can be obtained by typing
|
||||
<para>
|
||||
The full set of parameters available in <application>configure</application>
|
||||
can be obtained by typing
|
||||
|
||||
<programlisting>
|
||||
$ ./configure --help
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
The following parameters may be of interest to installers:
|
||||
<programlisting>
|
||||
$ ./configure --help
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following parameters may be of interest to installers:
|
||||
|
||||
<programlisting>
|
||||
<programlisting>
|
||||
Directories to install PostgreSQL in:
|
||||
--prefix=PREFIX install architecture-independent files in PREFIX
|
||||
[/usr/local/pgsql]
|
||||
|
@ -54,191 +56,198 @@ Features and packages:
|
|||
--with-CXX=<replaceable>compiler</replaceable>
|
||||
use specific C++ compiler
|
||||
--without-CXX prevent building C++ code
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
Some systems may have trouble building a specific feature of
|
||||
<productname>Postgres</productname>. For example, systems with a damaged
|
||||
C++ compiler may need to specify <option>--without-CXX</option> to instruct
|
||||
the build procedure to skip construction of <filename>libpq++</filename>.
|
||||
</para>
|
||||
<para>
|
||||
Use the <option>--with-includes</option> and
|
||||
<option>--with-libraries</option> options if you want to build
|
||||
<productname>Postgres</productname> using include files or libraries
|
||||
that are not installed in your system's standard search path. For
|
||||
example, you might use these to build with an experimental version of
|
||||
Tcl. If you need to specify more than one nonstandard directory for
|
||||
include files or libraries, do it like this:
|
||||
<programlisting>
|
||||
--with-includes="/opt/tcl/include /opt/perl5/include"
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Parameters for Building (<application>make</application>)</title>
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Some systems may have trouble building a specific feature of
|
||||
<productname>Postgres</productname>. For example, systems with a damaged
|
||||
C++ compiler may need to specify <option>--without-CXX</option> to instruct
|
||||
the build procedure to skip construction of <filename>libpq++</filename>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Use the <option>--with-includes</option> and
|
||||
<option>--with-libraries</option> options if you want to build
|
||||
<productname>Postgres</productname> using include files or libraries
|
||||
that are not installed in your system's standard search path. For
|
||||
example, you might use these to build with an experimental version of
|
||||
Tcl. If you need to specify more than one nonstandard directory for
|
||||
include files or libraries, do it like this:
|
||||
|
||||
<programlisting>
|
||||
--with-includes="/opt/tcl/include /opt/perl5/include"
|
||||
</programlisting>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Parameters for Building (<application>make</application>)</title>
|
||||
|
||||
<para>
|
||||
Many installation-related parameters can be set in the building
|
||||
stage of <productname>Postgres</productname> installation.
|
||||
</para>
|
||||
<para>
|
||||
In most cases, these parameters should be placed in a file,
|
||||
<filename>Makefile.custom</filename>, intended just for that purpose.
|
||||
The default distribution does not contain this optional file, so you
|
||||
will create it using a text editor of your choice. When upgrading installations,
|
||||
you can simply copy your old Makefile.custom to the new installation before
|
||||
doing the build.
|
||||
</para>
|
||||
<para>
|
||||
Alternatively, you can set variables on the <application>make</application>
|
||||
command line:
|
||||
<synopsis>
|
||||
make [ <replaceable>variable</replaceable>=<replaceable class="parameter">value</replaceable> [...] ]
|
||||
</synopsis>
|
||||
</para>
|
||||
<para>
|
||||
A few of the many variables that can be specified are:
|
||||
<para>
|
||||
Many installation-related parameters can be set in the building
|
||||
stage of <productname>Postgres</productname> installation.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In most cases, these parameters should be placed in a file,
|
||||
<filename>Makefile.custom</filename>, intended just for that purpose.
|
||||
The default distribution does not contain this optional file, so you
|
||||
will create it using a text editor of your choice. When upgrading installations,
|
||||
you can simply copy your old Makefile.custom to the new installation before
|
||||
doing the build.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Alternatively, you can set variables on the <application>make</application>
|
||||
command line:
|
||||
|
||||
<programlisting>
|
||||
make [ <replaceable>variable</replaceable>=<replaceable>value</replaceable> [...] ]
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A few of the many variables that can be specified are:
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>POSTGRESDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Top of the installation tree.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>BINDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of applications and utilities.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>LIBDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of object libraries, including shared libraries.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>HEADERDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of include files.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>ODBCINST</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of installation-wide <application>psqlODBC</application>
|
||||
(<acronym>ODBC</acronym>) configuration file.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</para>
|
||||
<para>
|
||||
There are other optional parameters which are not as commonly used.
|
||||
Many of those listed below are appropriate when doing
|
||||
<application>Postgres</application> server code development.
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>POSTGRESDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Top of the installation tree.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>BINDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of applications and utilities.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>LIBDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of object libraries, including shared libraries.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>HEADERDIR</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of include files.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>ODBCINST</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Location of installation-wide <application>psqlODBC</application>
|
||||
(<acronym>ODBC</acronym>) configuration file.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</para>
|
||||
<para>
|
||||
There are other optional parameters which are not as commonly used.
|
||||
Many of those listed below are appropriate when doing
|
||||
<application>Postgres</application> server code development.
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>CFLAGS</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Set flags for the C compiler.
|
||||
Should be assigned with "+=" to retain relevant default parameters.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>YFLAGS</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Set flags for the yacc/bison parser. <option>-v</option> might be
|
||||
used to help diagnose problems building a new parser.
|
||||
Should be assigned with "+=" to retain relevant default parameters.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>USE_TCL</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Enable Tcl interface building.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>HSTYLE</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
DocBook <acronym>HTML</acronym> style sheets for building the
|
||||
documentation from scratch.
|
||||
Not used unless you are developing new documentation from the
|
||||
DocBook-compatible <acronym>SGML</acronym> source documents in
|
||||
<filename>doc/src/sgml/</filename>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>PSTYLE</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
DocBook style sheets for building printed documentation from scratch.
|
||||
Not used unless you are developing new documentation from the
|
||||
DocBook-compatible <acronym>SGML</acronym> source documents in
|
||||
<filename>doc/src/sgml/</filename>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Here is an example <filename>Makefile.custom</filename> for a
|
||||
PentiumPro Linux system:
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>CFLAGS</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Set flags for the C compiler.
|
||||
Should be assigned with "+=" to retain relevant default parameters.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>YFLAGS</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Set flags for the yacc/bison parser. <option>-v</option> might be
|
||||
used to help diagnose problems building a new parser.
|
||||
Should be assigned with "+=" to retain relevant default parameters.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>USE_TCL</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Enable Tcl interface building.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>HSTYLE</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
DocBook <acronym>HTML</acronym> style sheets for building the
|
||||
documentation from scratch.
|
||||
Not used unless you are developing new documentation from the
|
||||
DocBook-compatible <acronym>SGML</acronym> source documents in
|
||||
<filename>doc/src/sgml/</filename>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<envar>PSTYLE</envar>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
DocBook style sheets for building printed documentation from scratch.
|
||||
Not used unless you are developing new documentation from the
|
||||
DocBook-compatible <acronym>SGML</acronym> source documents in
|
||||
<filename>doc/src/sgml/</filename>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</para>
|
||||
<para>
|
||||
Here is an example <filename>Makefile.custom</filename> for a
|
||||
PentiumPro Linux system:
|
||||
|
||||
<programlisting>
|
||||
<programlisting>
|
||||
# Makefile.custom
|
||||
# Thomas Lockhart 1999-06-01
|
||||
|
||||
|
@ -249,21 +258,22 @@ CFLAGS+= -m486 -O2
|
|||
|
||||
HSTYLE= /home/tgl/SGML/db118.d/docbook/html
|
||||
PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
||||
</programlisting>
|
||||
</para>
|
||||
</sect1>
|
||||
<Sect1>
|
||||
<Title>Locale Support</Title>
|
||||
</programlisting>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Locale Support</title>
|
||||
|
||||
<Para>
|
||||
<Note>
|
||||
<Para>
|
||||
Written by Oleg Bartunov.
|
||||
See <ULink url="http://www.sai.msu.su/~megera/postgres/">Oleg's web page</ULink>
|
||||
for additional information on locale and Russian language support.
|
||||
|
||||
</Para>
|
||||
</Note>
|
||||
<para>
|
||||
<note>
|
||||
<para>
|
||||
Written by Oleg Bartunov.
|
||||
See <ulink url="http://www.sai.msu.su/~megera/postgres/">Oleg's web page</ulink>
|
||||
for additional information on locale and Russian language support.
|
||||
|
||||
</para>
|
||||
</note>
|
||||
While doing a project for a company in Moscow, Russia,
|
||||
I encountered the problem that postgresql had no
|
||||
support of national alphabets. After looking for possible workarounds
|
||||
|
@ -271,7 +281,7 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
I'm not a C-programer but already had some experience with locale programming
|
||||
when I work with perl
|
||||
(debugging) and glimpse. After several days of digging through
|
||||
the <ProductName>Postgres</ProductName> source tree I made very minor corections to
|
||||
the <productname>Postgres</productname> source tree I made very minor corections to
|
||||
src/backend/utils/adt/varlena.c and src/backend/main/main.c and got what I needed!
|
||||
I did support only for
|
||||
<envar>LC_CTYPE</envar> and <envar>LC_COLLATE</envar>,
|
||||
|
@ -280,13 +290,13 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
and (to my surprise) it was
|
||||
incorporated into the <productname>Postgres</productname> distribution.
|
||||
</para>
|
||||
<Para>
|
||||
<para>
|
||||
People often complain that locale doesn't work for them.
|
||||
There are several common mistakes:
|
||||
|
||||
<ItemizedList>
|
||||
<ListItem>
|
||||
<Para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Didn't properly configure postgresql before compilation.
|
||||
You must run configure with --enable-locale option to enable locale support.
|
||||
Didn't setup environment correctly when starting postmaster.
|
||||
|
@ -297,24 +307,24 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
I use following shell script
|
||||
(runpostgres):
|
||||
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
#!/bin/sh
|
||||
|
||||
export LC_CTYPE=koi8-r
|
||||
export LC_COLLATE=koi8-r
|
||||
postmaster -B 1024 -S -D/usr/local/pgsql/data/ -o '-Fe'
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
|
||||
and run it from rc.local as
|
||||
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
/bin/su - postgres -c "/home/postgres/runpostgres"
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Broken locale support in OS (for example, locale support in libc
|
||||
under Linux several times has changed
|
||||
and this caused a lot of problems). Latest perl has also support of
|
||||
|
@ -333,10 +343,10 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
perl: warning: Falling back to the standard locale ("C").
|
||||
</programlisting>
|
||||
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Wrong location of locale files!
|
||||
|
||||
Possible locations include:
|
||||
|
@ -348,15 +358,15 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
Under Linux I did a symbolic link between <filename>/usr/lib/locale</filename> and
|
||||
<filename>/usr/share/locale</filename> to be sure that
|
||||
the next libc will not break my locale.
|
||||
</Para>
|
||||
</ListItem>
|
||||
</ItemizedList>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<Sect2>
|
||||
<Title>What are the Benefits?</Title>
|
||||
<sect2>
|
||||
<title>What are the Benefits?</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
You can use ~* and order by operators for strings contain characters
|
||||
from national alphabets. Non-english users
|
||||
definitely need that. If you won't use locale stuff just undefine
|
||||
|
@ -364,20 +374,20 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
</para>
|
||||
</sect2>
|
||||
|
||||
<Sect2>
|
||||
<Title>What are the Drawbacks?</Title>
|
||||
<sect2>
|
||||
<title>What are the Drawbacks?</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
There is one evident drawback of using locale - its speed!
|
||||
So, use locale only if you really need it.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Kerberos Authentication</Title>
|
||||
<sect1>
|
||||
<title>Kerberos Authentication</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
<productname>Kerberos</productname> is an industry-standard secure authentication
|
||||
system suitable for distributed computing over a public network.
|
||||
</para>
|
||||
|
@ -388,7 +398,7 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
<para>
|
||||
The
|
||||
<productname>Kerberos</productname>
|
||||
authentication system is not distributed with <Productname>Postgres</Productname>. Versions of
|
||||
authentication system is not distributed with <productname>Postgres</productname>. Versions of
|
||||
<productname>Kerberos</productname>
|
||||
are typically available as optional software from operating system
|
||||
vendors. In addition, a source code distribution may be obtained through
|
||||
|
@ -414,9 +424,9 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
<ulink url="info-kerberos@athena.mit.edu">MIT Project Athena</ulink>.
|
||||
Note that <acronym>FAQL</acronym>s
|
||||
(Frequently-Asked Questions Lists) are periodically posted to the
|
||||
<ulink url="mailto:kerberos@ATHENA.MIT.EDU"><productname>Kerberos</productname> mailing list</ulink>
|
||||
<ulink url="mailto:kerberos@athena.mit.edu"><productname>Kerberos</productname> mailing list</ulink>
|
||||
(send
|
||||
<ulink url="mailto:kerberos-request@ATHENA.MIT.EDU">mail to subscribe</ulink>),
|
||||
<ulink url="mailto:kerberos-request@athena.mit.edu">mail to subscribe</ulink>),
|
||||
and
|
||||
<ulink url="news:comp.protocols.kerberos">USENET news group</ulink>.
|
||||
</para>
|
||||
|
@ -435,19 +445,19 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
is somehow readable by the <productname>Postgres</productname> account.
|
||||
</para>
|
||||
<para>
|
||||
<Productname>Postgres</Productname> and its clients can be compiled to use
|
||||
<productname>Postgres</productname> and its clients can be compiled to use
|
||||
either Version 4 or Version 5 of the MIT
|
||||
<productname>Kerberos</productname>
|
||||
protocols by setting the
|
||||
<envar>KRBVERS</envar>
|
||||
variable in the file <filename>src/Makefile.global</filename> to the
|
||||
appropriate value. You can also change the location where
|
||||
<Productname>Postgres</Productname>
|
||||
<productname>Postgres</productname>
|
||||
expects to find the associated libraries, header files and its own
|
||||
server key file.
|
||||
</para>
|
||||
<para>
|
||||
After compilation is complete, <Productname>Postgres</Productname>
|
||||
After compilation is complete, <productname>Postgres</productname>
|
||||
must be registered as a <productname>Kerberos</productname>
|
||||
service. See the
|
||||
<citetitle>Kerberos Operations Notes</citetitle>
|
||||
|
@ -459,7 +469,7 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
<title>Operation</title>
|
||||
|
||||
<para>
|
||||
After initial installation, <Productname>Postgres</Productname>
|
||||
After initial installation, <productname>Postgres</productname>
|
||||
should operate in all ways as a normal
|
||||
<productname>Kerberos</productname>
|
||||
service. For details on the use of authentication, see the
|
||||
|
@ -477,13 +487,13 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
<listitem>
|
||||
<para>
|
||||
User principal names (anames) are assumed to
|
||||
contain the actual Unix/<Productname>Postgres</Productname> user name
|
||||
contain the actual Unix/<productname>Postgres</productname> user name
|
||||
in the first component.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <Productname>Postgres</Productname> service is assumed to be have two components,
|
||||
The <productname>Postgres</productname> service is assumed to be have two components,
|
||||
the service name and a hostname, canonicalized as in Version 4 (i.e., with all domain
|
||||
suffixes removed).
|
||||
</para>
|
||||
|
@ -491,6 +501,7 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<table tocentry="1">
|
||||
<title>Kerberos Parameter Examples</title>
|
||||
|
@ -543,3 +554,20 @@ PSTYLE= /home/tgl/SGML/db118.d/docbook/print
|
|||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/cvs.sgml,v 1.7 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/cvs.sgml,v 1.8 2000/05/02 20:01:51 thomas Exp $
|
||||
CVS code repository
|
||||
Thomas Lockhart
|
||||
-->
|
||||
|
@ -88,7 +88,7 @@ $ cvs checkout -r REL6_4 tc
|
|||
1.6
|
||||
</programlisting>
|
||||
|
||||
then the tag <quote><literal>TAG</literal></quote> will reference
|
||||
then the tag "<literal>TAG</literal>" will reference
|
||||
file1-1.2, file2-1.3, etc.
|
||||
|
||||
<note>
|
||||
|
@ -606,7 +606,7 @@ $ which cvsup
|
|||
who are actively maintaining the code base originally developed by
|
||||
<ulink
|
||||
url="http://www.research.digital.com/SRC/modula-3/html/home.html">the DEC Systems Research Center</ulink>.
|
||||
The <quote>PM3</quote> <productname>RPM</productname> distribution is roughly
|
||||
The <productname>PM3</productname> <productname>RPM</productname> distribution is roughly
|
||||
30MB compressed. At the time of writing, the 1.1.10-1 release
|
||||
installed cleanly on RH-5.2, whereas the 1.1.11-1 release is
|
||||
apparently built for another release (RH-6.0?) and does not run on RH-5.2.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.29 2000/04/14 15:08:56 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.30 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="datatype">
|
||||
|
@ -262,9 +262,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.29 2000/04/14 15:08:56 th
|
|||
|
||||
<note>
|
||||
<para>
|
||||
The original <productname>Postgres</productname> v4.2 code received from
|
||||
Berkeley rounded all double precision floating point results to six digits for
|
||||
output. Starting with v6.1, floating point numbers are allowed to retain
|
||||
Floating point numbers are allowed to retain
|
||||
most of the intrinsic precision of the type (typically 15 digits for doubles,
|
||||
6 digits for 4-byte floats).
|
||||
Other types with underlying floating point fields (e.g. geometric
|
||||
|
@ -277,8 +275,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.29 2000/04/14 15:08:56 th
|
|||
<title>Numeric Types</title>
|
||||
|
||||
<para>
|
||||
Numeric types consist of two- and four-byte integers and four- and eight-byte
|
||||
floating point numbers.
|
||||
Numeric types consist of two- and four-byte integers, four- and eight-byte
|
||||
floating point numbers and fixed-precision decimals.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -299,7 +297,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.29 2000/04/14 15:08:56 th
|
|||
<entry>decimal</entry>
|
||||
<entry>variable</entry>
|
||||
<entry>User-specified precision</entry>
|
||||
<entry>no limit</entry>
|
||||
<entry>~8000 digits</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>float4</entry>
|
||||
|
@ -554,13 +552,13 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
<title>Date/Time Types</title>
|
||||
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> supports the full set of
|
||||
<productname>Postgres</productname> supports the full set of
|
||||
<acronym>SQL</acronym> date and time types.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Date/Time Types</title>
|
||||
<title><productname>Postgres</productname> Date/Time Types</title>
|
||||
<titleabbrev>Date/Time</titleabbrev>
|
||||
<tgroup cols="4">
|
||||
<thead>
|
||||
|
@ -576,7 +574,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
<tbody>
|
||||
<row>
|
||||
<entry><type>timestamp</type></entry>
|
||||
<entry>for data containing both date and time</entry>
|
||||
<entry>both date and time</entry>
|
||||
<entry>8 bytes</entry>
|
||||
<entry>4713 BC</entry>
|
||||
<entry>AD 1465001</entry>
|
||||
|
@ -584,7 +582,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
</row>
|
||||
<row>
|
||||
<entry><type>timestamp with time zone</type></entry>
|
||||
<entry>date and time including time zone</entry>
|
||||
<entry>date and time with time zone</entry>
|
||||
<entry>8 bytes</entry>
|
||||
<entry>1903 AD</entry>
|
||||
<entry>2037 AD</entry>
|
||||
|
@ -600,7 +598,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
</row>
|
||||
<row>
|
||||
<entry><type>date</type></entry>
|
||||
<entry>for data containing only dates</entry>
|
||||
<entry>dates only</entry>
|
||||
<entry>4 bytes</entry>
|
||||
<entry>4713 BC</entry>
|
||||
<entry>32767 AD</entry>
|
||||
|
@ -608,7 +606,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
</row>
|
||||
<row>
|
||||
<entry><type>time</type></entry>
|
||||
<entry>for data containing only times of the day</entry>
|
||||
<entry>times of day only</entry>
|
||||
<entry>4 bytes</entry>
|
||||
<entry>00:00:00.00</entry>
|
||||
<entry>23:59:59.99</entry>
|
||||
|
@ -616,7 +614,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
</row>
|
||||
<row>
|
||||
<entry><type>time with time zone</type></entry>
|
||||
<entry>times of the day</entry>
|
||||
<entry>times of day only</entry>
|
||||
<entry>4 bytes</entry>
|
||||
<entry>00:00:00.00+12</entry>
|
||||
<entry>23:59:59.99-12</entry>
|
||||
|
@ -628,13 +626,17 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
|
||||
<note>
|
||||
<para>
|
||||
To ensure compatibility to earlier versions of <productname>PostgreSQL</productname>
|
||||
To ensure compatibility to earlier versions of <productname>Postgres</productname>
|
||||
we also continue to provide <type>datetime</type> (equivalent to <type>timestamp</type>) and
|
||||
<type>timespan</type> (equivalent to <type>interval</type>). The types <type>abstime</type>
|
||||
<type>timespan</type> (equivalent to <type>interval</type>),
|
||||
however support for these is now restricted to having an
|
||||
implicit translation to <type>timestamp</type> and
|
||||
<type>interval</type>.
|
||||
The types <type>abstime</type>
|
||||
and <type>reltime</type> are lower precision types which are used internally.
|
||||
You are discouraged from using any of these types in new
|
||||
applications and are encouraged to move any old
|
||||
ones over when appropriate. Any or all of these types might disappear in a future release.
|
||||
ones over when appropriate. Any or all of these internal types might disappear in a future release.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
|
@ -648,11 +650,11 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
<acronym>ISO-8601</acronym>, <acronym>SQL</acronym>-compatible,
|
||||
traditional <productname>Postgres</productname>, and others.
|
||||
The ordering of month and day in date input can be ambiguous, therefore a setting
|
||||
exists to specify how it should be interpreted. The command
|
||||
exists to specify how it should be interpreted in ambiguous cases. The command
|
||||
<literal>SET DateStyle TO 'US'</literal> or <literal>SET DateStyle TO 'NonEuropean'</literal>
|
||||
specifies the variant <quote>month before day</quote>, the command
|
||||
specifies the variant "month before day", the command
|
||||
<literal>SET DateStyle TO 'European'</literal> sets the variant
|
||||
<quote>day before month</quote>. The <literal>ISO</literal> style
|
||||
"day before month". The <literal>ISO</literal> style
|
||||
is the default but this default can be changed at compile time or at run time.
|
||||
</para>
|
||||
|
||||
|
@ -672,7 +674,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
The following are possible inputs for the <type>date</type> type.
|
||||
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Date Input</title>
|
||||
<title><productname>Postgres</productname> Date Input</title>
|
||||
<titleabbrev>Date Inputs</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
|
@ -702,10 +704,6 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
<entry>1/18/1999</entry>
|
||||
<entry>US; read as January 18 in any mode</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>1999.008</entry>
|
||||
<entry>Year and day of year</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>19990108</entry>
|
||||
<entry>ISO-8601 year, month, day</entry>
|
||||
|
@ -724,7 +722,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
</row>
|
||||
<row>
|
||||
<entry>January 8, 99 BC</entry>
|
||||
<entry>Year 99 before the common era</entry>
|
||||
<entry>Year 99 before the Common Era</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
|
@ -733,7 +731,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
|
||||
<para>
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Month Abbreviations</title>
|
||||
<title><productname>Postgres</productname> Month Abbreviations</title>
|
||||
<titleabbrev>Month Abbreviations</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
|
@ -800,7 +798,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
|
||||
<para>
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Day of Week Abbreviations</title>
|
||||
<title><productname>Postgres</productname> Day of Week Abbreviations</title>
|
||||
<titleabbrev>Day of Week Abbreviations</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
|
@ -850,7 +848,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
The following are valid <type>time</type> inputs.
|
||||
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Time Input</title>
|
||||
<title><productname>Postgres</productname> Time Input</title>
|
||||
<titleabbrev>Time Inputs</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
|
@ -904,13 +902,14 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
|
||||
<sect3>
|
||||
<title>time with time zone</title>
|
||||
|
||||
<para>
|
||||
This type is defined by SQL92, but the definition exhibits
|
||||
fundamental deficiencies which renders the type near useless. In
|
||||
fundamental deficiencies which renders the type nearly useless. In
|
||||
most cases, a combination of <type>date</type>,
|
||||
<type>time</type>, and <type>timestamp with time zone</type>
|
||||
<type>time</type>, and <type>timestamp</type>
|
||||
should provide a complete range of date/time functionality
|
||||
required by an application.
|
||||
required by any application.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -919,7 +918,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
as follows:
|
||||
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Time With Time
|
||||
<title><productname>Postgres</productname> Time With Time
|
||||
Zone Input</title>
|
||||
<titleabbrev>Time With Time Zone Inputs</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
|
@ -959,89 +958,97 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
|
|||
|
||||
<sect3>
|
||||
<title>timestamp</title>
|
||||
<para>
|
||||
Valid input for the <type>timestamp</type> type consists of a concatenation
|
||||
of a date and a time, followed by an optional <literal>AD</literal> or
|
||||
<literal>BC</literal>, followed by an optional time zone. (See below.)
|
||||
Thus
|
||||
<programlisting>
|
||||
1999-01-08 04:05:06 -8:00
|
||||
</programlisting>
|
||||
is a valid <type>timestamp</type> value, which is <acronym>ISO</acronym>-compliant.
|
||||
In addition, the wide-spread format
|
||||
<programlisting>
|
||||
January 8 04:05:06 1999 PST
|
||||
</programlisting>
|
||||
is supported.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<table tocentry="1" id="timezone">
|
||||
<title id="timezone-title"><productname>PostgreSQL</productname> Time Zone Input</title>
|
||||
<titleabbrev>Time Zone Inputs</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Time Zone</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>PST</entry>
|
||||
<entry>Pacific Standard Time</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-8:00</entry>
|
||||
<entry>ISO-8601 offset for PST</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-800</entry>
|
||||
<entry>ISO-8601 offset for PST</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-8</entry>
|
||||
<entry>ISO-8601 offset for PST</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</para>
|
||||
<para>
|
||||
Valid input for the <type>timestamp</type> type consists of a concatenation
|
||||
of a date and a time, followed by an optional <literal>AD</literal> or
|
||||
<literal>BC</literal>, followed by an optional time zone. (See below.)
|
||||
Thus
|
||||
|
||||
<programlisting>
|
||||
1999-01-08 04:05:06 -8:00
|
||||
</programlisting>
|
||||
|
||||
is a valid <type>timestamp</type> value, which is <acronym>ISO</acronym>-compliant.
|
||||
In addition, the wide-spread format
|
||||
|
||||
<programlisting>
|
||||
January 8 04:05:06 1999 PST
|
||||
</programlisting>
|
||||
is supported.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<table tocentry="1" id="timezone">
|
||||
<title id="timezone-title"><productname>Postgres</productname> Time Zone Input</title>
|
||||
<titleabbrev>Time Zone Inputs</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Time Zone</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>PST</entry>
|
||||
<entry>Pacific Standard Time</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-8:00</entry>
|
||||
<entry>ISO-8601 offset for PST</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-800</entry>
|
||||
<entry>ISO-8601 offset for PST</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-8</entry>
|
||||
<entry>ISO-8601 offset for PST</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>interval</title>
|
||||
|
||||
<para>
|
||||
<type>interval</type>s can be specified with the following syntax:
|
||||
<programlisting>
|
||||
|
||||
<programlisting>
|
||||
Quantity Unit [Quantity Unit...] [Direction]
|
||||
@ Quantity Unit [Direction]
|
||||
</programlisting>
|
||||
where: <literal>Quantity</literal> is ..., <literal>-1</literal>,
|
||||
<literal>0</literal>, <literal>1</literal>, <literal>2</literal>, ...;
|
||||
<literal>Unit</literal> is <literal>second</literal>,
|
||||
<literal>minute</literal>, <literal>hour</literal>, <literal>day</literal>,
|
||||
<literal>week</literal>, <literal>month</literal>, <literal>year</literal>,
|
||||
<literal>decade</literal>, <literal>century</literal>, <literal>millennium</literal>,
|
||||
or abbreviations or plurals of these units;
|
||||
<literal>Direction</literal> can be <literal>ago</literal> or
|
||||
empty.
|
||||
</para>
|
||||
</sect3>
|
||||
</programlisting>
|
||||
|
||||
where: <literal>Quantity</literal> is ..., <literal>-1</literal>,
|
||||
<literal>0</literal>, <literal>1</literal>, <literal>2</literal>, ...;
|
||||
<literal>Unit</literal> is <literal>second</literal>,
|
||||
<literal>minute</literal>, <literal>hour</literal>, <literal>day</literal>,
|
||||
<literal>week</literal>, <literal>month</literal>, <literal>year</literal>,
|
||||
<literal>decade</literal>, <literal>century</literal>, <literal>millennium</literal>,
|
||||
or abbreviations or plurals of these units;
|
||||
<literal>Direction</literal> can be <literal>ago</literal> or
|
||||
empty.
|
||||
</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>Special values</title>
|
||||
<para>
|
||||
The following <acronym>SQL</acronym>-compatible functions can be used as date or time
|
||||
input for the corresponding datatype: <literal>CURRENT_DATE</literal>,
|
||||
<literal>CURRENT_TIME</literal>, <literal>CURRENT_TIMESTAMP</literal>.
|
||||
</para>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> also supports several special constants for
|
||||
convenience.
|
||||
<title>Special values</title>
|
||||
|
||||
<para>
|
||||
The following <acronym>SQL</acronym>-compatible functions can be used as date or time
|
||||
input for the corresponding datatype: <literal>CURRENT_DATE</literal>,
|
||||
<literal>CURRENT_TIME</literal>, <literal>CURRENT_TIMESTAMP</literal>.
|
||||
</para>
|
||||
<para>
|
||||
<productname>Postgres</productname> also supports several special constants for
|
||||
convenience.
|
||||
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgresSQL</productname> Special Date/Time Constants</title>
|
||||
<title><productname>Postgres</productname> Special Date/Time Constants</title>
|
||||
<titleabbrev>Constants</titleabbrev>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
|
@ -1110,7 +1117,7 @@ January 8 04:05:06 1999 PST
|
|||
The default is the <acronym>ISO</acronym> format.
|
||||
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Date/Time Output Styles</title>
|
||||
<title><productname>Postgres</productname> Date/Time Output Styles</title>
|
||||
<titleabbrev>Styles</titleabbrev>
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
|
@ -1148,7 +1155,7 @@ January 8 04:05:06 1999 PST
|
|||
|
||||
<para>
|
||||
The output of the <type>date</type> and <type>time</type> styles is of course
|
||||
only the date or time part in accordance with the above examples
|
||||
only the date or time part in accordance with the above examples.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -1157,22 +1164,25 @@ January 8 04:05:06 1999 PST
|
|||
at Date/Time Input, how this setting affects interpretation of input values.)
|
||||
|
||||
<table tocentry="1">
|
||||
<title><productname>PostgreSQL</productname> Date Order Conventions</title>
|
||||
<titleabbrev>Order</titleabbrev>
|
||||
<title><productname>Postgres</productname> Date Order Conventions</title>
|
||||
<titleabbrev>Date Order</titleabbrev>
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Style Specification</entry>
|
||||
<entry>Description</entry>
|
||||
<entry>Example</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>European</entry>
|
||||
<entry><replaceable>day</replaceable>/<replaceable>month</replaceable>/<replaceable>year</replaceable></entry>
|
||||
<entry>17/12/1997 15:37:16.00 MET</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>US</entry>
|
||||
<entry><replaceable>month</replaceable>/<replaceable>day</replaceable>/<replaceable>year</replaceable></entry>
|
||||
<entry>12/17/1997 07:37:16.00 PST</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
@ -1181,9 +1191,10 @@ January 8 04:05:06 1999 PST
|
|||
</para>
|
||||
|
||||
<para>
|
||||
<type>interval</type> output looks like the input format, expect that units like
|
||||
<type>interval</type> output looks like the input format, except that units like
|
||||
<literal>week</literal> or <literal>century</literal> are converted to years and days.
|
||||
In ISO mode the output looks like
|
||||
|
||||
<programlisting>
|
||||
[ Quantity Units [ ... ] ] [ Days ] Hours:Minutes [ ago ]
|
||||
</programlisting>
|
||||
|
@ -1219,7 +1230,7 @@ January 8 04:05:06 1999 PST
|
|||
<title>Time Zones</title>
|
||||
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> endeavors to be compatible with
|
||||
<productname>Postgres</productname> endeavors to be compatible with
|
||||
<acronym>SQL92</acronym> definitions for typical usage.
|
||||
However, the <acronym>SQL92</acronym> standard has an odd mix of date and
|
||||
time types and capabilities. Two obvious problems are:
|
||||
|
@ -1249,7 +1260,7 @@ January 8 04:05:06 1999 PST
|
|||
</para>
|
||||
|
||||
<para>
|
||||
To address these difficulties, <productname>PostgreSQL</productname>
|
||||
To address these difficulties, <productname>Postgres</productname>
|
||||
associates time zones only with date and time
|
||||
types which contain both date and time,
|
||||
and assumes local time for any type containing only
|
||||
|
@ -1260,7 +1271,7 @@ January 8 04:05:06 1999 PST
|
|||
</para>
|
||||
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> obtains time zone support
|
||||
<productname>Postgres</productname> obtains time zone support
|
||||
from the underlying operating system for dates between 1902 and
|
||||
2038 (near the typical date limits for Unix-style
|
||||
systems). Outside of this range, all dates are assumed to be
|
||||
|
@ -1322,7 +1333,7 @@ January 8 04:05:06 1999 PST
|
|||
<title>Internals</title>
|
||||
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> uses Julian dates
|
||||
<productname>Postgres</productname> uses Julian dates
|
||||
for all date/time calculations. They have the nice property of correctly
|
||||
predicting/calculating any date more recent than 4713BC
|
||||
to far into the future, using the assumption that the length of the
|
||||
|
@ -1476,13 +1487,32 @@ January 8 04:05:06 1999 PST
|
|||
<para>
|
||||
<type>point</type> is specified using the following syntax:
|
||||
|
||||
<programlisting>
|
||||
( x , y )
|
||||
x , y
|
||||
where
|
||||
x is the x-axis coordinate as a floating point number
|
||||
y is the y-axis coordinate as a floating point number
|
||||
</programlisting>
|
||||
<synopsis>
|
||||
( <replaceable>x</replaceable> , <replaceable>y</replaceable> )
|
||||
<replaceable>x</replaceable> , <replaceable>y</replaceable>
|
||||
</synopsis>
|
||||
|
||||
where the arguments are
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><replaceable>x</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The x-axis coordinate as a floating point number.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><replaceable>y</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The y-axis coordinate as a floating point number.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
|
@ -1495,13 +1525,26 @@ where
|
|||
|
||||
<para>
|
||||
<type>lseg</type> is specified using the following syntax:
|
||||
<programlisting>
|
||||
( ( x1 , y1 ) , ( x2 , y2 ) )
|
||||
( x1 , y1 ) , ( x2 , y2 )
|
||||
x1 , y1 , x2 , y2
|
||||
where
|
||||
(x1,y1) and (x2,y2) are the endpoints of the segment
|
||||
</programlisting>
|
||||
|
||||
<synopsis>
|
||||
( ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> ) )
|
||||
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> )
|
||||
<replaceable>x1</replaceable> , <replaceable>y1</replaceable> , <replaceable>x2</replaceable> , <replaceable>y2</replaceable>
|
||||
</synopsis>
|
||||
|
||||
where the arguments are
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>(<replaceable>x1</replaceable>,<replaceable>y1</replaceable>)</term>
|
||||
<term>(<replaceable>x2</replaceable>,<replaceable>y2</replaceable>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The endpoints of the line segment.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
|
@ -1516,14 +1559,28 @@ where
|
|||
<para>
|
||||
<type>box</type> is specified using the following syntax:
|
||||
|
||||
<programlisting>
|
||||
( ( x1 , y1 ) , ( x2 , y2 ) )
|
||||
( x1 , y1 ) , ( x2 , y2 )
|
||||
x1 , y1 , x2 , y2
|
||||
where
|
||||
(x1,y1) and (x2,y2) are opposite corners
|
||||
</programlisting>
|
||||
<synopsis>
|
||||
( ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> ) )
|
||||
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ( <replaceable>x2</replaceable> , <replaceable>y2</replaceable> )
|
||||
<replaceable>x1</replaceable> , <replaceable>y1</replaceable> , <replaceable>x2</replaceable> , <replaceable>y2</replaceable>
|
||||
</synopsis>
|
||||
|
||||
where the arguments are
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>(<replaceable>x1</replaceable>,<replaceable>y1</replaceable>)</term>
|
||||
<term>(<replaceable>x2</replaceable>,<replaceable>y2</replaceable>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Opposite corners of the box.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Boxes are output using the first syntax.
|
||||
The corners are reordered on input to store
|
||||
the lower left corner first and the upper right corner last.
|
||||
|
@ -1546,24 +1603,37 @@ where
|
|||
<function>isopen(p)</function>
|
||||
and
|
||||
<function>isclosed(p)</function>
|
||||
are supplied to select either type in a query.
|
||||
are supplied to test for either type in a query.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<type>path</type> is specified using the following syntax:
|
||||
|
||||
<programlisting>
|
||||
( ( x1 , y1 ) , ... , ( xn , yn ) )
|
||||
[ ( x1 , y1 ) , ... , ( xn , yn ) ]
|
||||
( x1 , y1 ) , ... , ( xn , yn )
|
||||
( x1 , y1 , ... , xn , yn )
|
||||
x1 , y1 , ... , xn , yn
|
||||
where
|
||||
(x1,y1),...,(xn,yn) are points 1 through n
|
||||
a leading "[" indicates an open path
|
||||
a leading "(" indicates a closed path
|
||||
</programlisting>
|
||||
<synopsis>
|
||||
( ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ... , ( <replaceable>xn</replaceable> , <replaceable>yn</replaceable> ) )
|
||||
[ ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ... , ( <replaceable>xn</replaceable> , <replaceable>yn</replaceable> ) ]
|
||||
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ... , ( <replaceable>xn</replaceable> , <replaceable>yn</replaceable> )
|
||||
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> , ... , <replaceable>xn</replaceable> , <replaceable>yn</replaceable> )
|
||||
<replaceable>x1</replaceable> , <replaceable>y1</replaceable> , ... , <replaceable>xn</replaceable> , <replaceable>yn</replaceable>
|
||||
</synopsis>
|
||||
|
||||
where the arguments are
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>(<replaceable>x</replaceable>,<replaceable>y</replaceable>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Endpoints of the line segments comprising the path.
|
||||
A leading square bracket ("[") indicates an open path, while
|
||||
a leading parenthesis ("(") indicates a closed path.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Paths are output using the first syntax.
|
||||
Note that <productname>Postgres</productname> versions prior to
|
||||
v6.1 used a format for paths which had a single leading parenthesis,
|
||||
|
@ -1587,19 +1657,33 @@ where
|
|||
<para>
|
||||
<type>polygon</type> is specified using the following syntax:
|
||||
|
||||
<programlisting>
|
||||
( ( x1 , y1 ) , ... , ( xn , yn ) )
|
||||
( x1 , y1 ) , ... , ( xn , yn )
|
||||
( x1 , y1 , ... , xn , yn )
|
||||
x1 , y1 , ... , xn , yn
|
||||
where
|
||||
(x1,y1),...,(xn,yn) are points 1 through n
|
||||
</programlisting>
|
||||
<synopsis>
|
||||
( ( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ... , ( <replaceable>xn</replaceable> , <replaceable>yn</replaceable> ) )
|
||||
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> ) , ... , ( <replaceable>xn</replaceable> , <replaceable>yn</replaceable> )
|
||||
( <replaceable>x1</replaceable> , <replaceable>y1</replaceable> , ... , <replaceable>xn</replaceable> , <replaceable>yn</replaceable> )
|
||||
<replaceable>x1</replaceable> , <replaceable>y1</replaceable> , ... , <replaceable>xn</replaceable> , <replaceable>yn</replaceable>
|
||||
</synopsis>
|
||||
|
||||
where the arguments are
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>(<replaceable>x</replaceable>,<replaceable>y</replaceable>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Endpoints of the line segments comprising the boundary of the
|
||||
polygon.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Polygons are output using the first syntax.
|
||||
Note that <productname>Postgres</productname> versions prior to
|
||||
v6.1 used a format for polygons which had a single leading parenthesis, the list
|
||||
of x-axis coordinates, the list of y-axis coordinates,
|
||||
of x-axis coordinates, the list of y-axis coordinates,
|
||||
followed by a closing parenthesis.
|
||||
The built-in function <function>upgradepoly</function> is supplied to convert
|
||||
polygons dumped and reloaded from pre-v6.1 databases.
|
||||
|
@ -1616,16 +1700,37 @@ where
|
|||
<para>
|
||||
<type>circle</type> is specified using the following syntax:
|
||||
|
||||
<programlisting>
|
||||
< ( x , y ) , r >
|
||||
( ( x , y ) , r )
|
||||
( x , y ) , r
|
||||
x , y , r
|
||||
where
|
||||
(x,y) is the center of the circle
|
||||
r is the radius of the circle
|
||||
</programlisting>
|
||||
<synopsis>
|
||||
< ( <replaceable>x</replaceable> , <replaceable>y</replaceable> ) , <replaceable>r</replaceable> >
|
||||
( ( <replaceable>x</replaceable> , <replaceable>y</replaceable> ) , <replaceable>r</replaceable> )
|
||||
( <replaceable>x</replaceable> , <replaceable>y</replaceable> ) , <replaceable>r</replaceable>
|
||||
<replaceable>x</replaceable> , <replaceable>y</replaceable> , <replaceable>r</replaceable>
|
||||
</synopsis>
|
||||
|
||||
where the arguments are
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>(<replaceable>x</replaceable>,<replaceable>y</replaceable>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Center of the circle.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><replaceable>r</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Radius of the circle.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Circles are output using the first syntax.
|
||||
</para>
|
||||
</sect2>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.8 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.9 2000/05/02 20:01:51 thomas Exp $
|
||||
Date/time details
|
||||
-->
|
||||
|
||||
|
@ -645,7 +645,7 @@ Date/time details
|
|||
</para>
|
||||
|
||||
<para>
|
||||
<quote>Julian Day</quote> is different from <quote>Julian Date</quote>.
|
||||
"Julian Day" is different from "Julian Date".
|
||||
|
||||
The Julian calendar was introduced by Julius Caesar in 45 BC. It was
|
||||
in common use until the 1582, when countries started changing to the
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.9 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.10 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="dfunc">
|
||||
|
@ -7,105 +7,6 @@ $Header: /cvsroot/pgsql/doc/src/sgml/dfunc.sgml,v 1.9 2000/03/31 03:27:40 thomas
|
|||
|
||||
<para>
|
||||
|
||||
<!--
|
||||
.SH "Compiling Dynamically-Loaded C Functions"
|
||||
.PP
|
||||
Different operating systems require different procedures for compiling
|
||||
C source files so that Postgres can load them dynamically. This section
|
||||
discusses the required compiler and loader options on each system.
|
||||
.PP
|
||||
Under Linux ELF, object files can be generated by specifing the compiler
|
||||
flag -fpic.
|
||||
.PP
|
||||
Under Ultrix, all object files that Postgres is expected to load
|
||||
dynamically must be compiled using
|
||||
.IR /bin/cc
|
||||
with the \*(lq-G 0\*(rq option turned on. The object file name in the
|
||||
.IR as
|
||||
clause should end in \*(lq.o\*(rq.
|
||||
.PP
|
||||
Under HP-UX, DEC OSF/1, AIX and SunOS 4, all object files must be
|
||||
turned into
|
||||
.IR "shared libraries"
|
||||
using the operating system's native object file loader,
|
||||
.IR ld(1).
|
||||
.PP
|
||||
Under HP-UX, an object file must be compiled using the native HP-UX C
|
||||
compiler,
|
||||
.IR /bin/cc ,
|
||||
with both the \*(lq+z\*(rq and \*(lq+u\*(rq flags turned on. The
|
||||
first flag turns the object file into \*(lqposition-independent
|
||||
code\*(rq (PIC); the second flag removes some alignment restrictions
|
||||
that the PA-RISC architecture normally enforces. The object file must
|
||||
then be turned into a shared library using the HP-UX loader,
|
||||
.IR /bin/ld .
|
||||
The command lines to compile a C source file, \*(lqfoo.c\*(rq, look
|
||||
like:
|
||||
.nf
|
||||
cc <other flags> +z +u -c foo.c
|
||||
ld <other flags> -b -o foo.sl foo.o
|
||||
.fi
|
||||
The object file name in the
|
||||
.BR as
|
||||
clause should end in \*(lq.sl\*(rq.
|
||||
.PP
|
||||
An extra step is required under versions of HP-UX prior to 9.00. If
|
||||
the Postgres header file
|
||||
.nf
|
||||
include/c.h
|
||||
.fi
|
||||
is not included in the source file, then the following line must also
|
||||
be added at the top of every source file:
|
||||
.nf
|
||||
#pragma HP_ALIGN HPUX_NATURAL_S500
|
||||
.fi
|
||||
However, this line must not appear in programs compiled under HP-UX
|
||||
9.00 or later.
|
||||
.PP
|
||||
Under DEC OSF/1, an object file must be compiled and then turned
|
||||
into a shared library using the OSF/1 loader,
|
||||
.IR /bin/ld .
|
||||
In this case, the command lines look like:
|
||||
.nf
|
||||
cc <other flags> -c foo.c
|
||||
ld <other flags> -shared -expect_unresolved '*' -o foo.so foo.o
|
||||
.fi
|
||||
The object file name in the
|
||||
.BR as
|
||||
clause should end in \*(lq.so\*(rq.
|
||||
.PP
|
||||
Under SunOS 4, an object file must be compiled and then turned into a
|
||||
shared library using the SunOS 4 loader,
|
||||
.IR /bin/ld .
|
||||
The command lines look like:
|
||||
.nf
|
||||
cc <other flags> -PIC -c foo.c
|
||||
ld <other flags> -dc -dp -Bdynamic -o foo.so foo.o
|
||||
.fi
|
||||
The object file name in the
|
||||
.BR as
|
||||
clause should end in \*(lq.so\*(rq.
|
||||
.PP
|
||||
Under AIX, object files are compiled normally but building the shared
|
||||
library requires a couple of steps. First, create the object file:
|
||||
.nf
|
||||
cc <other flags> -c foo.c
|
||||
.fi
|
||||
You must then create a symbol \*(lqexports\*(rq file for the object
|
||||
file:
|
||||
.nf
|
||||
mkldexport foo.o `pwd` > foo.exp
|
||||
.fi
|
||||
Finally, you can create the shared library:
|
||||
.nf
|
||||
ld <other flags> -H512 -T512 -o foo.so -e _nostart \e
|
||||
-bI:.../lib/postgres.exp -bE:foo.exp foo.o \e
|
||||
-lm -lc 2>/dev/null
|
||||
.fi
|
||||
You should look at the Postgres User's Manual for an explanation of this
|
||||
procedure.
|
||||
-->
|
||||
|
||||
After you have created and registered a user-defined
|
||||
function, your work is essentially done.
|
||||
<productname>Postgres</productname>,
|
||||
|
@ -120,8 +21,6 @@ procedure.
|
|||
describes how to perform the compilation and
|
||||
link-editing required before you can load your user-defined
|
||||
functions into a running <productname>Postgres</productname> server.
|
||||
Note that
|
||||
this process has changed as of Version 4.2.
|
||||
</para>
|
||||
|
||||
<!--
|
||||
|
@ -155,10 +54,11 @@ procedure.
|
|||
You should expect to read (and reread, and re-reread) the
|
||||
manual pages for the C compiler, cc(1), and the link
|
||||
editor, ld(1), if you have specific questions. In
|
||||
addition, the regression test suites in the directory
|
||||
<filename>PGROOT/src/regress</filename> contain several
|
||||
working examples of this process. If you copy what these
|
||||
tests do, you should not have any problems.
|
||||
addition, the contrib area (<filename>PGROOT/contrib</filename>)
|
||||
and the regression test suites in the directory
|
||||
<filename>PGROOT/src/test/regress</filename> contain several
|
||||
working examples of this process. If you copy an example then
|
||||
you should not have any problems.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -248,6 +148,29 @@ procedure.
|
|||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<sect1>
|
||||
<title>Linux</title>
|
||||
|
||||
<para>
|
||||
Under Linux ELF, object files can be generated by specifying the compiler
|
||||
flag -fpic.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For example,
|
||||
<programlisting>
|
||||
# simple Linux example
|
||||
% cc -fpic -c <replaceable>foo.c</replaceable>
|
||||
</programlisting>
|
||||
|
||||
produces an object file called <replaceable>foo.o</replaceable>
|
||||
that can then be
|
||||
dynamically loaded into <productname>Postgres</productname>.
|
||||
No additional loading or link-editing must be performed.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<!--
|
||||
<sect1>
|
||||
<title><acronym>ULTRIX</acronym></title>
|
||||
|
||||
|
@ -271,6 +194,7 @@ procedure.
|
|||
No additional loading or link-editing must be performed.
|
||||
</para>
|
||||
</sect1>
|
||||
-->
|
||||
|
||||
<sect1>
|
||||
<title><acronym>DEC OSF/1</acronym></title>
|
||||
|
@ -327,14 +251,15 @@ procedure.
|
|||
file with special compiler flags and a shared library
|
||||
must be produced.
|
||||
The necessary steps with HP-UX are as follows. The +z
|
||||
flag to the HP-UX C compiler produces so-called
|
||||
"Position Independent Code" (PIC) and the +u flag
|
||||
removes
|
||||
flag to the HP-UX C compiler produces
|
||||
<firstterm>Position Independent Code</firstterm> (PIC)
|
||||
and the +u flag removes
|
||||
some alignment restrictions that the PA-RISC architecture
|
||||
normally enforces. The object file must be turned
|
||||
into a shared library using the HP-UX link editor with
|
||||
the -b option. This sounds complicated but is actually
|
||||
very simple, since the commands to do it are just:
|
||||
|
||||
<programlisting>
|
||||
# simple HP-UX example
|
||||
% cc +z +u -c foo.c
|
||||
|
@ -375,6 +300,95 @@ procedure.
|
|||
command line.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<!--
|
||||
Future integration: Create separate sections for these operating
|
||||
systems and integrate the info from this old man page.
|
||||
- thomas 2000-04-21
|
||||
|
||||
Under HP-UX, DEC OSF/1, AIX and SunOS 4, all object files must be
|
||||
turned into
|
||||
.IR "shared libraries"
|
||||
using the operating system's native object file loader,
|
||||
.IR ld(1).
|
||||
.PP
|
||||
Under HP-UX, an object file must be compiled using the native HP-UX C
|
||||
compiler,
|
||||
.IR /bin/cc ,
|
||||
with both the \*(lq+z\*(rq and \*(lq+u\*(rq flags turned on. The
|
||||
first flag turns the object file into \*(lqposition-independent
|
||||
code\*(rq (PIC); the second flag removes some alignment restrictions
|
||||
that the PA-RISC architecture normally enforces. The object file must
|
||||
then be turned into a shared library using the HP-UX loader,
|
||||
.IR /bin/ld .
|
||||
The command lines to compile a C source file, \*(lqfoo.c\*(rq, look
|
||||
like:
|
||||
.nf
|
||||
cc <other flags> +z +u -c foo.c
|
||||
ld <other flags> -b -o foo.sl foo.o
|
||||
.fi
|
||||
The object file name in the
|
||||
.BR as
|
||||
clause should end in \*(lq.sl\*(rq.
|
||||
.PP
|
||||
An extra step is required under versions of HP-UX prior to 9.00. If
|
||||
the Postgres header file
|
||||
.nf
|
||||
include/c.h
|
||||
.fi
|
||||
is not included in the source file, then the following line must also
|
||||
be added at the top of every source file:
|
||||
.nf
|
||||
#pragma HP_ALIGN HPUX_NATURAL_S500
|
||||
.fi
|
||||
However, this line must not appear in programs compiled under HP-UX
|
||||
9.00 or later.
|
||||
.PP
|
||||
Under DEC OSF/1, an object file must be compiled and then turned
|
||||
into a shared library using the OSF/1 loader,
|
||||
.IR /bin/ld .
|
||||
In this case, the command lines look like:
|
||||
.nf
|
||||
cc <other flags> -c foo.c
|
||||
ld <other flags> -shared -expect_unresolved '*' -o foo.so foo.o
|
||||
.fi
|
||||
The object file name in the
|
||||
.BR as
|
||||
clause should end in \*(lq.so\*(rq.
|
||||
.PP
|
||||
Under SunOS 4, an object file must be compiled and then turned into a
|
||||
shared library using the SunOS 4 loader,
|
||||
.IR /bin/ld .
|
||||
The command lines look like:
|
||||
.nf
|
||||
cc <other flags> -PIC -c foo.c
|
||||
ld <other flags> -dc -dp -Bdynamic -o foo.so foo.o
|
||||
.fi
|
||||
The object file name in the
|
||||
.BR as
|
||||
clause should end in \*(lq.so\*(rq.
|
||||
.PP
|
||||
Under AIX, object files are compiled normally but building the shared
|
||||
library requires a couple of steps. First, create the object file:
|
||||
.nf
|
||||
cc <other flags> -c foo.c
|
||||
.fi
|
||||
You must then create a symbol \*(lqexports\*(rq file for the object
|
||||
file:
|
||||
.nf
|
||||
mkldexport foo.o `pwd` > foo.exp
|
||||
.fi
|
||||
Finally, you can create the shared library:
|
||||
.nf
|
||||
ld <other flags> -H512 -T512 -o foo.so -e _nostart \e
|
||||
-bI:.../lib/postgres.exp -bE:foo.exp foo.o \e
|
||||
-lm -lc 2>/dev/null
|
||||
.fi
|
||||
You should look at the Postgres User's Manual for an explanation of this
|
||||
procedure.
|
||||
|
||||
-->
|
||||
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
|
|
@ -1,29 +1,7 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/docguide.sgml,v 1.25 2000/02/02 16:22:45 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/docguide.sgml,v 1.26 2000/05/02 20:01:51 thomas Exp $
|
||||
Documentation Guide
|
||||
Thomas Lockhart
|
||||
|
||||
Revision 1.15 1999/05/27 15:49:07 thomas
|
||||
Markup fixes.
|
||||
Update for v6.5 release.
|
||||
|
||||
Revision 1.12 1998/12/18 16:17:29 thomas
|
||||
Include more details on editing with Emacs.
|
||||
Remove mention of the old "migration" flat files.
|
||||
Change URLs for resources to point to areas, not particular files.
|
||||
That way things stay correct even when version of tools change.
|
||||
Suggested by Vince Vielhaber.
|
||||
|
||||
Revision 1.11 1998/10/30 19:36:57 thomas
|
||||
Minor editing and markup changes as a result of preparing the Postscript
|
||||
documentation for v6.4.
|
||||
Bigger updates to the installation instructions (install and config).
|
||||
|
||||
Revision 1.8 1998/08/17 16:17:07 thomas
|
||||
Bring document list closer to up to day.
|
||||
Add a note on sgml-tools that they are now working with jade and so
|
||||
may become the toolset of choice in the future.
|
||||
|
||||
-->
|
||||
|
||||
<appendix label="DG2" id="docguide">
|
||||
|
@ -45,7 +23,7 @@ Add a note on sgml-tools that they are now working with jade and so
|
|||
|
||||
<para>
|
||||
The purpose of documentation is to make <productname>Postgres</productname>
|
||||
easier to learn, use, and develop.
|
||||
easier to learn, use, and extend..
|
||||
The documentation set should describe the <productname>Postgres</productname>
|
||||
system, language, and interfaces.
|
||||
It should be able to answer
|
||||
|
@ -61,18 +39,26 @@ Add a note on sgml-tools that they are now working with jade and so
|
|||
formats:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
<listitem>
|
||||
<para>
|
||||
Plain text for pre-installation information.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<acronym>HTML</acronym>, for on-line browsing and reference.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Hardcopy, for in-depth reading and reference.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Hardcopy (Postscript or PDF), for in-depth reading and reference.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<acronym>man pages</acronym>, for quick reference.
|
||||
</para></listitem>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
|
@ -983,7 +969,7 @@ $ make man
|
|||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Hardcopy Generation for v6.5</title>
|
||||
<title>Hardcopy Generation for v7.0</title>
|
||||
|
||||
<para>
|
||||
The hardcopy Postscript documentation is generated by converting the
|
||||
|
@ -1084,14 +1070,14 @@ $ make man
|
|||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Export the result as <quote>ASCII Layout</quote>.
|
||||
Export the result as "ASCII Layout".
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Using emacs or vi, clean up the tabular information in
|
||||
<filename>INSTALL</filename>. Remove the <quote>mailto</quote>
|
||||
<filename>INSTALL</filename>. Remove the "mailto"
|
||||
<acronym>URLs</acronym> for the porting contributors to shrink
|
||||
the column heights.
|
||||
</para>
|
||||
|
@ -1104,19 +1090,21 @@ $ make man
|
|||
|
||||
<para>
|
||||
Several areas are addressed while generating Postscript
|
||||
hardcopy.
|
||||
hardcopy, including RTF repair, ToC generation, and page break
|
||||
adjustments.
|
||||
</para>
|
||||
|
||||
<procedure>
|
||||
<title>Applixware <acronym>RTF</acronym> Cleanup</title>
|
||||
|
||||
<para>
|
||||
Applixware does not seem to do a complete job of importing <acronym>RTF</acronym>
|
||||
generated by jade/MSS. In particular, all text is given the
|
||||
<quote>Header1</quote> style attribute label, although the text
|
||||
formatting itself is acceptable. Also, the Table of Contents page
|
||||
numbers do not refer to the section listed in the table, but rather
|
||||
refer to the page of the ToC itself.</para>
|
||||
<application>jade</application>, an integral part of the
|
||||
hardcopy procedure, omits specifying a default style for body
|
||||
text. In the past, this undiagnosed problem led to a long process
|
||||
of Table of Contents (ToC) generation. However, with great help
|
||||
from the ApplixWare folks the symptom was diagnosed and a
|
||||
workaround is available.
|
||||
</para>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
|
@ -1128,6 +1116,35 @@ $ make man
|
|||
</para>
|
||||
</step>
|
||||
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Repair the RTF file to correctly specify all
|
||||
styles, in particular the default style. The field can be added
|
||||
using <application>vi</application> or the following small
|
||||
<application>sed</application> procedure:
|
||||
|
||||
<programlisting>
|
||||
#!/bin/sh
|
||||
# fixrtf.sh
|
||||
# Utility to repair slight damage in RTF files generated by jade
|
||||
# Thomas Lockhart <lockhart@alumni.caltech.edu>
|
||||
#
|
||||
for i in $* ; do
|
||||
mv $i $i.orig
|
||||
cat $i.orig | sed 's#\\stylesheet#\\stylesheet{\\s0 Normal;}#' > $i
|
||||
done
|
||||
|
||||
exit
|
||||
</programlisting>
|
||||
|
||||
where the script is adding <literal>{\s0 Normal;}</literal> as
|
||||
the zero-th style in the document. According to ApplixWare, the
|
||||
RTF standard would prohibit adding an implicit zero-th style,
|
||||
though M$Word happens to handle this case.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Open a new document in <productname>Applix Words</productname> and
|
||||
|
@ -1137,55 +1154,152 @@ $ make man
|
|||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Print out the existing Table of Contents, to mark up in the following
|
||||
few steps.
|
||||
Generate a new ToC using ApplixWare.
|
||||
</para>
|
||||
|
||||
<substeps>
|
||||
<step>
|
||||
<para>
|
||||
Select the existing ToC lines, from the beginning of the first
|
||||
character on the first line to the last character of the last
|
||||
line.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>
|
||||
Build a new ToC using
|
||||
<literal>Tools.BookBuilding.CreateToC</literal>. Select the
|
||||
first three levels of headers for inclusion in the ToC.
|
||||
This will
|
||||
replace the existing lines imported in the RTF with a native
|
||||
ApplixWare ToC.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>
|
||||
Adjust the ToC formatting by using
|
||||
<literal>Format.Style</literal>, selecting each of the three
|
||||
ToC styles, and adjusting the indents for <literal>First</literal> and
|
||||
<literal>Left</literal>. Use the following values:
|
||||
|
||||
<table>
|
||||
<title>Indent Formatting for Table of Contents</title>
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>
|
||||
Style
|
||||
</entry>
|
||||
<entry>
|
||||
First Indent (inches)
|
||||
</entry>
|
||||
<entry>
|
||||
Left Indent (inches)
|
||||
</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>
|
||||
<literal>TOC-Heading 1</literal>
|
||||
</entry>
|
||||
<entry>
|
||||
<literal>0.6</literal>
|
||||
</entry>
|
||||
<entry>
|
||||
<literal>0.6</literal>
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>
|
||||
<literal>TOC-Heading 2</literal>
|
||||
</entry>
|
||||
<entry>
|
||||
<literal>1.0</literal>
|
||||
</entry>
|
||||
<entry>
|
||||
<literal>1.0</literal>
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>
|
||||
<literal>TOC-Heading 3</literal>
|
||||
</entry>
|
||||
<entry>
|
||||
<literal>1.4</literal>
|
||||
</entry>
|
||||
<entry>
|
||||
<literal>1.4</literal>
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</para>
|
||||
</step>
|
||||
</substeps>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Work through the document to:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Adjust page breaks.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Adjust table column widths.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Insert figures into the document. Center each figure on the page using
|
||||
the centering margins button on the ApplixWare toolbar.
|
||||
|
||||
<note>
|
||||
<para>
|
||||
Not all documents have figures.
|
||||
You can grep the <acronym>SGML</acronym> source files for
|
||||
the string "<literal>graphic</literal>" to identify those parts of the
|
||||
documentation which may have figures. A few figures are replicated in
|
||||
various parts of the documentation.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Insert figures into the document. Center each figure on the page using
|
||||
the centering margins button.</para>
|
||||
|
||||
<para>
|
||||
Not all documents have figures.
|
||||
You can grep the <acronym>SGML</acronym> source files for
|
||||
the string <quote>graphic</quote> to identify those parts of the
|
||||
documentation which may have figures. A few figures are replicated in
|
||||
various parts of the documentation.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Work through the document, adjusting page breaks and table column
|
||||
widths.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
If a bibliography is present, Applix Words seems to mark all remaining
|
||||
text after the first title as having an underlined attribute. Select
|
||||
all remaining text, turn off underlining using the underlining button,
|
||||
then explicitly underline each document and book title.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Work through the document, marking up the ToC hardcopy with the actual
|
||||
page number of each ToC entry.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Replace the right-justified incorrect page numbers in the ToC with
|
||||
Replace the right-justified page numbers in the Examples and
|
||||
Figures portions of the ToC with
|
||||
correct values. This only takes a few minutes per document.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
If a bibliography is present, remove the <firstterm>short
|
||||
form</firstterm> reference title from each entry. The
|
||||
<productname>DocBook</productname> stylesheets from Norm Walsh
|
||||
seem to print these out, even though this is a subset of the
|
||||
information immediately following.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Save the document as native Applix Words format to allow easier last
|
||||
|
@ -1195,7 +1309,7 @@ $ make man
|
|||
|
||||
<step performance="required">
|
||||
<para>
|
||||
<quote>Print</quote> the document
|
||||
"Print" the document
|
||||
to a file in Postscript format.
|
||||
</para>
|
||||
</step>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.13 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.14 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter>
|
||||
|
@ -32,16 +32,17 @@ $Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.13 2000/03/31 03:27:40 thomas
|
|||
This describes an embedded <acronym>SQL</acronym> in <acronym>C</acronym>
|
||||
package for <productname>Postgres</productname>.
|
||||
|
||||
It is written by <ulink url="">Linus Tolke</ulink>
|
||||
and <ulink url="">Michael Meskes</ulink>.
|
||||
It is written by <ulink url="linus@epact.se">Linus Tolke</ulink>
|
||||
and <ulink url="meskes@debian.org">Michael Meskes</ulink>.
|
||||
|
||||
<note>
|
||||
<para>
|
||||
Permission is granted to copy and use in the same way as you are allowed
|
||||
to copy and use the rest of the <productname>PostgreSQL</productname>.
|
||||
to copy and use the rest of <productname>PostgreSQL</productname>.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
|
||||
<sect1>
|
||||
<title>Why Embedded <acronym>SQL</acronym>?</title>
|
||||
|
||||
|
@ -472,8 +473,9 @@ struct sqlca
|
|||
|
||||
<para>
|
||||
The following list shows all the known incompatibilities. If you find one
|
||||
not listed please notify <ulink url="">Michael
|
||||
Meskes</ulink>. Note, however, that we list only incompatibilities from
|
||||
not listed please notify
|
||||
<ulink url="meskes@debian.org">Michael Meskes</ulink>.
|
||||
Note, however, that we list only incompatibilities from
|
||||
a precompiler of another RDBMS to <application>ecpg</application> and not
|
||||
additional <application>ecpg</application> features that these RDBMS do not
|
||||
have.
|
||||
|
@ -977,7 +979,7 @@ ECPGdo(__LINE__, NULL, "select res from mytable where index = ? ",
|
|||
This request is modified
|
||||
by the input variables, i.e. the variables that where not known at
|
||||
compile time but are to be entered in the request. Where the variables
|
||||
should go the string contains <quote>;</quote>.
|
||||
should go the string contains ";".
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
|
|
@ -38,8 +38,8 @@ $ export PATH
|
|||
to the <FileName>.profile</FileName> file in your home directory.
|
||||
From now on, we will assume that you have added the
|
||||
<ProductName>Postgres</ProductName> bin directory to your path. In addition, we
|
||||
will make frequent reference to <Quote>setting a shell
|
||||
variable</Quote> or <Quote>setting an environment variable</Quote> throughout
|
||||
will make frequent reference to "setting a shell
|
||||
variable" or "setting an environment variable" throughout
|
||||
this document. If you did not fully understand the
|
||||
last paragraph on modifying your search path, you
|
||||
should consult the Unix manual pages that describe your
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<title id="sql-funcs">SQL Functions</title>
|
||||
|
||||
<para>
|
||||
<quote><acronym>SQL</acronym> functions</quote> are constructs
|
||||
<firstterm><acronym>SQL</acronym> functions</firstterm> are constructs
|
||||
defined by the <acronym>SQL92</acronym> standard which have
|
||||
function-like syntax but which can not be implemented as simple
|
||||
functions.
|
||||
|
@ -476,24 +476,6 @@
|
|||
<entry>preserve months and years</entry>
|
||||
<entry>age('now', timestamp '1957-06-13')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>timestamp(abstime)</entry>
|
||||
<entry>timestamp</entry>
|
||||
<entry>convert to timestamp</entry>
|
||||
<entry>timestamp(abstime 'now')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>timestamp(date)</entry>
|
||||
<entry>timestamp</entry>
|
||||
<entry>convert to timestamp</entry>
|
||||
<entry>timestamp(date 'today')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>timestamp(date,time)</entry>
|
||||
<entry>timestamp</entry>
|
||||
<entry>convert to timestamp</entry>
|
||||
<entry>timestamp(timestamp '1998-02-24',time '23:07');</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>date_part(text,timestamp)</entry>
|
||||
<entry>float8</entry>
|
||||
|
@ -513,10 +495,10 @@
|
|||
<entry>date_trunc('month',abstime 'now')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>isfinite(abstime)</entry>
|
||||
<entry>bool</entry>
|
||||
<entry>a finite time?</entry>
|
||||
<entry>isfinite(abstime 'now')</entry>
|
||||
<entry>interval(reltime)</entry>
|
||||
<entry>interval</entry>
|
||||
<entry>convert to interval</entry>
|
||||
<entry>interval(reltime '4 hours')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>isfinite(timestamp)</entry>
|
||||
|
@ -537,10 +519,22 @@
|
|||
<entry>reltime(interval '4 hrs')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>interval(reltime)</entry>
|
||||
<entry>interval</entry>
|
||||
<entry>convert to interval</entry>
|
||||
<entry>interval(reltime '4 hours')</entry>
|
||||
<entry>timestamp(date)</entry>
|
||||
<entry>timestamp</entry>
|
||||
<entry>convert to timestamp</entry>
|
||||
<entry>timestamp(date 'today')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>timestamp(date,time)</entry>
|
||||
<entry>timestamp</entry>
|
||||
<entry>convert to timestamp</entry>
|
||||
<entry>timestamp(timestamp '1998-02-24',time '23:07');</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>to_char(timestamp,text)</entry>
|
||||
<entry>text</entry>
|
||||
<entry>convert to string</entry>
|
||||
<entry>to_char(timestamp '1998-02-24','DD');</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
|
@ -673,6 +667,10 @@
|
|||
<entry>HH12</entry>
|
||||
<entry>hour of day (01-12)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>HH24</entry>
|
||||
<entry>hour of day (00-23)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>MI</entry>
|
||||
<entry>minute (00-59)</entry>
|
||||
|
@ -810,7 +808,7 @@
|
|||
<entry>month in Roman Numerals (I-XII; I=JAN) - upper case</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>rn</entry>
|
||||
<entry>rm</entry>
|
||||
<entry>month in Roman Numerals (I-XII; I=JAN) - lower case</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
@ -874,29 +872,34 @@
|
|||
<para>
|
||||
<function>to_timestamp</function> and <function>to_date</function>
|
||||
skip blank space if the <literal>FX</literal> option is
|
||||
not use. <literal>FX</literal> Must be specified as the first item
|
||||
not used. <literal>FX</literal> must be specified as the first item
|
||||
in the template.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
'\' - must be use as double \\, example '\\HH\\MI\\SS'
|
||||
Backslash ("<literal>\</literal>") must be specified with a double backslash
|
||||
("<literal>\\</literal>"); for example <literal>'\\HH\\MI\\SS'</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
'"' - string between a quotation marks is skipen and not is parsed.
|
||||
If you want write '"' to output you must use \\", example '\\"YYYY Month\\"'.
|
||||
A double quote ('"') between quotation marks is skipped and is not parsed.
|
||||
If you want to write a double quote to output you must preceed
|
||||
it with a double backslash (<literal>'\\"</literal>), for
|
||||
example <literal>'\\"YYYY Month\\"'</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
text - the PostgreSQL's to_char() support text without '"', but string
|
||||
between a quotation marks is fastly and you have guarantee, that a text
|
||||
not will interpreted as a keyword (format-picture), exapmle '"Hello Year: "YYYY'.
|
||||
<function>to_char</function> supports text without a leading
|
||||
double quote ('"'), but any string
|
||||
between a quotation marks is rapidly handled and you are
|
||||
guaranteed that it will not be interpreted as a template
|
||||
keyword (example: <literal>'"Hello Year: "YYYY'</literal>).
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
@ -1213,19 +1216,19 @@
|
|||
<row>
|
||||
<entry>area(object)</entry>
|
||||
<entry>float8</entry>
|
||||
<entry>area of circle, ...</entry>
|
||||
<entry>area of item</entry>
|
||||
<entry>area(box '((0,0),(1,1))')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>box(box,box)</entry>
|
||||
<entry>box</entry>
|
||||
<entry>boxes to intersection box</entry>
|
||||
<entry>intersection box</entry>
|
||||
<entry>box(box '((0,0),(1,1))',box '((0.5,0.5),(2,2))')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>center(object)</entry>
|
||||
<entry>point</entry>
|
||||
<entry>center of circle, ...</entry>
|
||||
<entry>center of item</entry>
|
||||
<entry>center(box '((0,0),(1,2))')</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -1255,15 +1258,9 @@
|
|||
<row>
|
||||
<entry>length(object)</entry>
|
||||
<entry>float8</entry>
|
||||
<entry>length of line segment, ...</entry>
|
||||
<entry>length of item</entry>
|
||||
<entry>length(path '((-1,0),(1,0))')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>length(path)</entry>
|
||||
<entry>float8</entry>
|
||||
<entry>length of path</entry>
|
||||
<entry>length(path '((0,0),(1,1),(2,0))')</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>pclose(path)</entry>
|
||||
<entry>path</entry>
|
||||
|
@ -1324,91 +1321,91 @@ Not defined by this name. Implements the intersection operator '#'
|
|||
<row>
|
||||
<entry>box(circle)</entry>
|
||||
<entry>box</entry>
|
||||
<entry>convert circle to box</entry>
|
||||
<entry>circle to box</entry>
|
||||
<entry>box('((0,0),2.0)'::circle)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>box(point,point)</entry>
|
||||
<entry>box</entry>
|
||||
<entry>convert points to box</entry>
|
||||
<entry>points to box</entry>
|
||||
<entry>box('(0,0)'::point,'(1,1)'::point)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>box(polygon)</entry>
|
||||
<entry>box</entry>
|
||||
<entry>convert polygon to box</entry>
|
||||
<entry>polygon to box</entry>
|
||||
<entry>box('((0,0),(1,1),(2,0))'::polygon)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>circle(box)</entry>
|
||||
<entry>circle</entry>
|
||||
<entry>convert to circle</entry>
|
||||
<entry>to circle</entry>
|
||||
<entry>circle('((0,0),(1,1))'::box)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>circle(point,float8)</entry>
|
||||
<entry>circle</entry>
|
||||
<entry>convert to circle</entry>
|
||||
<entry>point to circle</entry>
|
||||
<entry>circle('(0,0)'::point,2.0)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>lseg(box)</entry>
|
||||
<entry>lseg</entry>
|
||||
<entry>convert diagonal to lseg</entry>
|
||||
<entry>box diagonal to lseg</entry>
|
||||
<entry>lseg('((-1,0),(1,0))'::box)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>lseg(point,point)</entry>
|
||||
<entry>lseg</entry>
|
||||
<entry>convert to lseg</entry>
|
||||
<entry>points to lseg</entry>
|
||||
<entry>lseg('(-1,0)'::point,'(1,0)'::point)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>path(polygon)</entry>
|
||||
<entry>point</entry>
|
||||
<entry>convert to path</entry>
|
||||
<entry>polygon to path</entry>
|
||||
<entry>path('((0,0),(1,1),(2,0))'::polygon)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>point(circle)</entry>
|
||||
<entry>point</entry>
|
||||
<entry>convert to point (center)</entry>
|
||||
<entry>center</entry>
|
||||
<entry>point('((0,0),2.0)'::circle)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>point(lseg,lseg)</entry>
|
||||
<entry>point</entry>
|
||||
<entry>convert to point (intersection)</entry>
|
||||
<entry>intersection</entry>
|
||||
<entry>point('((-1,0),(1,0))'::lseg, '((-2,-2),(2,2))'::lseg)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>point(polygon)</entry>
|
||||
<entry>point</entry>
|
||||
<entry>center of polygon</entry>
|
||||
<entry>center</entry>
|
||||
<entry>point('((0,0),(1,1),(2,0))'::polygon)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>polygon(box)</entry>
|
||||
<entry>polygon</entry>
|
||||
<entry>convert to polygon with 12 points</entry>
|
||||
<entry>12 point polygon</entry>
|
||||
<entry>polygon('((0,0),(1,1))'::box)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>polygon(circle)</entry>
|
||||
<entry>polygon</entry>
|
||||
<entry>convert to 12-point polygon</entry>
|
||||
<entry>12-point polygon</entry>
|
||||
<entry>polygon('((0,0),2.0)'::circle)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>polygon(<replaceable class="parameter">npts</replaceable>,circle)</entry>
|
||||
<entry>polygon</entry>
|
||||
<entry>convert to <replaceable class="parameter">npts</replaceable> polygon</entry>
|
||||
<entry><replaceable class="parameter">npts</replaceable> polygon</entry>
|
||||
<entry>polygon(12,'((0,0),2.0)'::circle)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>polygon(path)</entry>
|
||||
<entry>polygon</entry>
|
||||
<entry>convert to polygon</entry>
|
||||
<entry>path to polygon</entry>
|
||||
<entry>polygon('((0,0),(1,1),(2,0))'::path)</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
@ -1438,19 +1435,19 @@ Not defined by this name. Implements the intersection operator '#'
|
|||
<row>
|
||||
<entry>revertpoly(polygon)</entry>
|
||||
<entry>polygon</entry>
|
||||
<entry>convert pre-v6.1 polygon</entry>
|
||||
<entry>to pre-v6.1</entry>
|
||||
<entry>revertpoly('((0,0),(1,1),(2,0))'::polygon)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>upgradepath(path)</entry>
|
||||
<entry>path</entry>
|
||||
<entry>convert pre-v6.1 path</entry>
|
||||
<entry>to pre-v6.1</entry>
|
||||
<entry>upgradepath('(1,3,0,0,1,1,2,0)'::path)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>upgradepoly(polygon)</entry>
|
||||
<entry>polygon</entry>
|
||||
<entry>convert pre-v6.1 polygon</entry>
|
||||
<entry>to pre-v6.1</entry>
|
||||
<entry>upgradepoly('(0,1,2,0,1,0)'::polygon)</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.7 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.8 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<sect1>
|
||||
|
@ -189,7 +189,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.7 2000/03/31 03:27:40 thom
|
|||
<title><productname>PostgreSQL</productname></title>
|
||||
|
||||
<para>
|
||||
By 1996, it became clear that the name <quote>Postgres95</quote> would
|
||||
By 1996, it became clear that the name "Postgres95" would
|
||||
not stand the test of time. We chose a new name,
|
||||
<productname>PostgreSQL</productname>, to reflect the relationship
|
||||
between the original <productname>Postgres</productname> and the more
|
||||
|
|
|
@ -354,7 +354,8 @@ CREATE MEMSTORE ON <table> COLUMNS <cols>
|
|||
is an index built over a subset of a table; the subset is defined by
|
||||
a predicate. <productname>Postgres</productname>
|
||||
supported partial indices with arbitrary
|
||||
predicates. I believe IBM's db2 for as/400 supports partial indices
|
||||
predicates. I believe IBM's <productname>DB2</productname>
|
||||
for AS/400 supports partial indices
|
||||
using single-clause predicates.
|
||||
</para>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/inherit.sgml,v 1.6 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/inherit.sgml,v 1.7 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="inherit">
|
||||
|
@ -78,12 +78,12 @@ SELECT c.name, c.altitude
|
|||
Madison | 845
|
||||
</programlisting>
|
||||
|
||||
Here the <quote>*</quote> after cities indicates that the query should
|
||||
Here the "*" after cities indicates that the query should
|
||||
be run over cities and all classes below cities in the
|
||||
inheritance hierarchy. Many of the commands that we
|
||||
have already discussed -- <command>SELECT</command>,
|
||||
<command>UPDATE</command> and <command>DELETE</command> --
|
||||
support this <quote>*</quote> notation, as do others, like
|
||||
support this "*" notation, as do others, like
|
||||
<command>ALTER TABLE</command>.
|
||||
</para>
|
||||
</chapter>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/install.sgml,v 1.40 2000/04/14 23:04:44 tgl Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/install.sgml,v 1.41 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="install">
|
||||
|
@ -33,7 +33,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/install.sgml,v 1.40 2000/04/14 23:04:
|
|||
work with other <application>make</application> programs. On GNU/Linux systems
|
||||
GNU make is the default tool, on other systems you may find that
|
||||
GNU <application>make</application> is installed under the name
|
||||
<quote>gmake</quote>.
|
||||
<literal>gmake</literal>.
|
||||
We will use that name from now on to indicate <acronym>GNU</acronym>
|
||||
<application>make</application>, no matter what name it has on your system.
|
||||
To test for <acronym>GNU</acronym> <application>make</application> enter
|
||||
|
@ -612,23 +612,28 @@ libpq.so.2.1: cannot open shared object file: No such file or directory
|
|||
Run the regression tests against the installed server (using the sequential
|
||||
test method). If you didn't run the tests before installation, you should
|
||||
definitely do it now.
|
||||
For detailed instructions see <xref endterm="regress-title"
|
||||
linkend="regress">.
|
||||
For detailed instructions see
|
||||
<xref endterm="regress-title" linkend="regress">.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
To start <quote>playing around</quote>, set up the paths as explained above
|
||||
To start experimenting with <productname>Postgres</productname>,
|
||||
set up the paths as explained above
|
||||
and start the server. To create a database, type
|
||||
|
||||
<programlisting>
|
||||
> createdb testdb
|
||||
</programlisting>
|
||||
|
||||
Then enter
|
||||
|
||||
<programlisting>
|
||||
> psql testdb
|
||||
</programlisting>
|
||||
|
||||
to connect to that database. At the prompt you can enter SQL commands
|
||||
and start experimenting.
|
||||
</para>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.9 2000/03/31 03:27:40 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.10 2000/05/02 20:01:51 thomas Exp $
|
||||
|
||||
Postgres quick Installation Guide.
|
||||
- thomas 1998-10-26
|
||||
|
@ -28,27 +28,27 @@ Postgres quick Installation Guide.
|
|||
<!entity biblio SYSTEM "biblio.sgml">
|
||||
]>
|
||||
|
||||
<book>
|
||||
<book id="installation">
|
||||
|
||||
<!-- Title information -->
|
||||
|
||||
<title>PostgreSQL Installation Guide</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v6.5 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
</authorgroup>
|
||||
<title>PostgreSQL Installation Guide</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v7.0 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
</authorgroup>
|
||||
<!-- editor in authorgroup is not supported
|
||||
<AuthorGroup>
|
||||
-->
|
||||
<editor>
|
||||
<firstname>Thomas</firstname>
|
||||
<surname>Lockhart</surname>
|
||||
<affiliation>
|
||||
<orgname>Caltech/JPL</orgname>
|
||||
</affiliation>
|
||||
</editor>
|
||||
<editor>
|
||||
<firstname>Thomas</firstname>
|
||||
<surname>Lockhart</surname>
|
||||
<affiliation>
|
||||
<orgname>Caltech/JPL</orgname>
|
||||
</affiliation>
|
||||
</editor>
|
||||
<!--
|
||||
</AuthorGroup>
|
||||
-->
|
||||
|
@ -57,17 +57,17 @@ Postgres quick Installation Guide.
|
|||
<AuthorInitials>TGL</AuthorInitials>
|
||||
-->
|
||||
|
||||
<date>(last updated 1999-06-01)</date>
|
||||
</bookbiblio>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-9
|
||||
by the Postgres Global Development Group.
|
||||
</para>
|
||||
</legalnotice>
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
</bookinfo>
|
||||
</bookinfo>
|
||||
|
||||
<!--
|
||||
<TOC> </TOC>
|
||||
|
@ -82,38 +82,38 @@ Your name here...
|
|||
</Dedication>
|
||||
-->
|
||||
|
||||
<preface>
|
||||
<title>Summary</title>
|
||||
<preface>
|
||||
<title>Summary</title>
|
||||
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<productname>PostgreSQL</productname> is an open-source descendant
|
||||
of this original Berkeley code.
|
||||
</para>
|
||||
</preface>
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<productname>PostgreSQL</productname> is an open-source descendant
|
||||
of this original Berkeley code.
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
<chapter>
|
||||
<title>Introduction</title>
|
||||
<chapter>
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>
|
||||
This installation procedure makes some assumptions about the desired configuration
|
||||
and runtime environment for your system. This may be adequate for many installations,
|
||||
and is almost certainly adequate for a first installation. But you may want to
|
||||
do an initial installation up to the point of unpacking the source tree
|
||||
and installing documentation, and then print or browse the
|
||||
<citetitle>Administrator's Guide</citetitle>.</para>
|
||||
<para>
|
||||
This installation procedure makes some assumptions about the desired configuration
|
||||
and runtime environment for your system. This may be adequate for many installations,
|
||||
and is almost certainly adequate for a first installation. But you may want to
|
||||
do an initial installation up to the point of unpacking the source tree
|
||||
and installing documentation, and then print or browse the
|
||||
<citetitle>Administrator's Guide</citetitle>.</para>
|
||||
|
||||
</chapter>
|
||||
</chapter>
|
||||
|
||||
&ports;
|
||||
&install;
|
||||
&config;
|
||||
&release;
|
||||
&ports;
|
||||
&install;
|
||||
&config;
|
||||
&release;
|
||||
|
||||
<!--
|
||||
<INDEX> </INDEX>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.15 2000/04/19 21:21:38 momjian Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.16 2000/05/02 20:01:51 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="libpqplusplus">
|
||||
|
@ -719,7 +719,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/libpq++.sgml,v 1.15 2000/04/19 21:21:
|
|||
<function>PgDatabase::PutLine</function>
|
||||
or when the last string has been received from the backend using
|
||||
<function>PgDatabase::GetLine</function>.
|
||||
It must be issued or the backend may get <quote>out of sync</quote> with
|
||||
It must be issued or the backend may get "out of sync" with
|
||||
the frontend. Upon return from this function, the backend is ready to
|
||||
receive the next query.
|
||||
</para>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.37 2000/04/25 16:39:07 momjian Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.38 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="libpq-chapter">
|
||||
|
@ -8,11 +8,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.37 2000/04/25 16:39:07 momji
|
|||
<para>
|
||||
<filename>libpq</filename> is the <acronym>C</acronym>
|
||||
application programmer's interface to
|
||||
<productname>PostgreSQL</productname>. <filename>libpq</filename> is a set
|
||||
<productname>Postgres</productname>. <filename>libpq</filename> is a set
|
||||
of library routines that allow client programs to pass queries to the
|
||||
<productname>Postgres</productname> backend server and to receive the
|
||||
results of these queries. <filename>libpq</filename> is also the
|
||||
underlying engine for several other <productname>PostgreSQL</productname>
|
||||
underlying engine for several other <productname>Postgres</productname>
|
||||
application interfaces, including <filename>libpq++</filename> (C++),
|
||||
<filename>libpgtcl</filename> (Tcl), <productname>Perl</productname>, and
|
||||
<filename>ecpg</filename>. So some aspects of libpq's behavior will be
|
||||
|
@ -415,7 +415,7 @@ struct PQconninfoOption
|
|||
is leaked for each call to PQconndefaults().
|
||||
</para>
|
||||
<para>
|
||||
In PostgreSQL versions before 7.0, PQconndefaults() returned a pointer
|
||||
In Postgres versions before 7.0, PQconndefaults() returned a pointer
|
||||
to a static array, rather than a dynamically allocated array. That
|
||||
wasn't thread-safe, so the behavior has been changed.
|
||||
</para>
|
||||
|
@ -484,7 +484,7 @@ libpq application programmers should be careful to
|
|||
maintain the PGconn abstraction. Use the accessor functions below to get
|
||||
at the contents of PGconn. Avoid directly referencing the fields of the
|
||||
PGconn structure because they are subject to change in the future.
|
||||
(Beginning in <productname>PostgreSQL</productname> release 6.4, the
|
||||
(Beginning in <productname>Postgres</productname> release 6.4, the
|
||||
definition of struct PGconn is not even provided in <filename>libpq-fe.h</filename>.
|
||||
If you have old code that accesses PGconn fields directly, you can keep using it
|
||||
by including <filename>libpq-int.h</filename> too, but you are encouraged to fix the code
|
||||
|
@ -985,7 +985,7 @@ and is not thread-safe.
|
|||
<function>PQprint</function>
|
||||
Prints out all the tuples and, optionally, the
|
||||
attribute names to the specified output stream.
|
||||
<synopsis>
|
||||
<synopsis>
|
||||
void PQprint(FILE* fout, /* output stream */
|
||||
const PGresult *res,
|
||||
const PQprintOpt *po);
|
||||
|
@ -998,11 +998,11 @@ struct {
|
|||
pqbool expanded; /* expand tables */
|
||||
pqbool pager; /* use pager for output if needed */
|
||||
char *fieldSep; /* field separator */
|
||||
char *tableOpt; /* insert to HTML <table ...> */
|
||||
char *caption; /* HTML <caption> */
|
||||
char *tableOpt; /* insert to HTML <replaceable>table ...</replaceable> */
|
||||
char *caption; /* HTML <replaceable>caption</replaceable> */
|
||||
char **fieldName; /* null terminated array of replacement field names */
|
||||
} PQprintOpt;
|
||||
</synopsis>
|
||||
</synopsis>
|
||||
This function was formerly used by <application>psql</application>
|
||||
to print query results, but this is no longer the case and this
|
||||
function is no longer actively supported.
|
||||
|
@ -1342,7 +1342,7 @@ is not currently open or the backend is not currently processing a query.
|
|||
<title>Fast Path</title>
|
||||
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> provides a fast path interface to send
|
||||
<productname>Postgres</productname> provides a fast path interface to send
|
||||
function calls to the backend. This is a trapdoor into system internals and
|
||||
can be a potential security hole. Most users will not need this feature.
|
||||
|
||||
|
@ -1398,7 +1398,7 @@ typedef struct {
|
|||
<title>Asynchronous Notification</title>
|
||||
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> supports asynchronous notification via the
|
||||
<productname>Postgres</productname> supports asynchronous notification via the
|
||||
LISTEN and NOTIFY commands. A backend registers its interest in a particular
|
||||
notification condition with the LISTEN command (and can stop listening
|
||||
with the UNLISTEN command). All backends listening on a
|
||||
|
@ -1438,7 +1438,7 @@ be sure to free it with <function>free()</function> to avoid a memory leak.
|
|||
</para>
|
||||
<note>
|
||||
<para>
|
||||
In <productname>PostgreSQL</productname> 6.4 and later,
|
||||
In <productname>Postgres</productname> 6.4 and later,
|
||||
the <literal>be_pid</literal> is the notifying backend's,
|
||||
whereas in earlier versions it was always your own backend's <acronym>PID</acronym>.
|
||||
</para>
|
||||
|
@ -1484,7 +1484,7 @@ if any notifications came in during the processing of the query.
|
|||
<title>Functions Associated with the COPY Command</title>
|
||||
|
||||
<para>
|
||||
The COPY command in <productname>PostgreSQL</productname> has options to read from
|
||||
The COPY command in <productname>Postgres</productname> has options to read from
|
||||
or write to the network connection used by <filename>libpq</filename>.
|
||||
Therefore, functions are necessary to access this network
|
||||
connection directly so applications may take advantage of this capability.
|
||||
|
@ -1568,7 +1568,7 @@ The data returned will not extend beyond a newline character. If possible
|
|||
a whole line will be returned at one time. But if the buffer offered by
|
||||
the caller is too small to hold a line sent by the backend, then a partial
|
||||
data line will be returned. This can be detected by testing whether the
|
||||
last returned byte is <quote><literal>\n</literal></quote> or not.
|
||||
last returned byte is "<literal>\n</literal>" or not.
|
||||
The returned string is not null-terminated. (If you want to add a
|
||||
terminating null, be sure to pass a bufsize one smaller than the room
|
||||
actually available.)
|
||||
|
@ -1585,7 +1585,7 @@ int PQputline(PGconn *conn,
|
|||
const char *string);
|
||||
</synopsis>
|
||||
Note the application must explicitly send the two
|
||||
characters <quote><literal>\.</literal></quote> on a final line to indicate to
|
||||
characters "<literal>\.</literal>" on a final line to indicate to
|
||||
the backend that it has finished sending its data.
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -1615,7 +1615,7 @@ specified directly.
|
|||
sent to the backend using <function>PQputline</function> or when the
|
||||
last string has been received from the backend
|
||||
using <function>PGgetline</function>. It must be issued or the backend
|
||||
may get <quote>out of sync</quote> with the frontend. Upon
|
||||
may get "out of sync" with the frontend. Upon
|
||||
return from this function, the backend is ready to
|
||||
receive the next query.
|
||||
The return value is 0 on successful completion,
|
||||
|
@ -1718,7 +1718,7 @@ PQsetNoticeProcessor(PGconn *conn,
|
|||
</para>
|
||||
|
||||
<para>
|
||||
By default, <application>libpq</application> prints <quote>notice</quote>
|
||||
By default, <application>libpq</application> prints "notice"
|
||||
messages from the backend on <filename>stderr</filename>,
|
||||
as well as a few error messages that it generates by itself.
|
||||
This behavior can be overridden by supplying a callback function that
|
||||
|
@ -1777,14 +1777,14 @@ Without a host name, libpq will connect using a local Unix domain socket.
|
|||
<listitem>
|
||||
<para>
|
||||
<envar>PGPORT</envar> sets the default port or local Unix domain socket
|
||||
file extension for communicating with the <productname>PostgreSQL</productname>
|
||||
file extension for communicating with the <productname>Postgres</productname>
|
||||
backend.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<envar>PGDATABASE</envar> sets the default
|
||||
<productname>PostgreSQL</productname> database name.
|
||||
<productname>Postgres</productname> database name.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
@ -1802,8 +1802,8 @@ sets the password used if the backend demands password authentication.
|
|||
<listitem>
|
||||
<para>
|
||||
<envar>PGREALM</envar> sets the Kerberos realm to use with
|
||||
<productname>PostgreSQL</productname>, if it is different from the local realm.
|
||||
If <envar>PGREALM</envar> is set, <productname>PostgreSQL</productname>
|
||||
<productname>Postgres</productname>, if it is different from the local realm.
|
||||
If <envar>PGREALM</envar> is set, <productname>Postgres</productname>
|
||||
applications will attempt authentication with servers for this realm and use
|
||||
separate ticket files to avoid conflicts with local
|
||||
ticket files. This environment variable is only
|
||||
|
@ -1813,7 +1813,7 @@ used if Kerberos authentication is selected by the backend.
|
|||
<listitem>
|
||||
<para>
|
||||
<envar>PGOPTIONS</envar> sets additional runtime options for
|
||||
the <productname>PostgreSQL</productname> backend.
|
||||
the <productname>Postgres</productname> backend.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
@ -1878,7 +1878,7 @@ for information on correct values for these environment variables.
|
|||
|
||||
<para>
|
||||
<filename>libpq</filename> is thread-safe as of
|
||||
<productname>PostgreSQL</productname> 7.0, so long as no two threads
|
||||
<productname>Postgres</productname> 7.0, so long as no two threads
|
||||
attempt to manipulate the same PGconn object at the same time. In particular,
|
||||
you can't issue concurrent queries from different threads through the same
|
||||
connection object. (If you need to run concurrent queries, start up multiple
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/lisp.sgml,v 2.2 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/lisp.sgml,v 2.3 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="lisp">
|
||||
|
@ -31,8 +31,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/lisp.sgml,v 2.2 2000/03/31 03:27:41 t
|
|||
|
||||
<para>
|
||||
The code (version 0.2) is available under GNU GPL from
|
||||
<ulink url="http://www.chez.com/emarsden/downloads/pg.el">
|
||||
http://www.chez.com/emarsden/downloads/pg.el</ulink>
|
||||
<ulink url="http://www.chez.com/emarsden/downloads/pg.el">Eric Marsden</ulink>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/lobj.sgml,v 1.10 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/lobj.sgml,v 1.11 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="largeObjects">
|
||||
|
@ -288,235 +288,235 @@ SELECT lo_export(image.raster, '/tmp/motd') from image
|
|||
<para>
|
||||
<programlisting>
|
||||
/*--------------------------------------------------------------
|
||||
*
|
||||
* testlo.c--
|
||||
* test using large objects with libpq
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* /usr/local/devel/pglite/cvs/src/doc/manual.me,v 1.16 1995/09/01 23:55:00 jolly Exp
|
||||
*
|
||||
*--------------------------------------------------------------
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "libpq-fe.h"
|
||||
#include "libpq/libpq-fs.h"
|
||||
*
|
||||
* testlo.c--
|
||||
* test using large objects with libpq
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* /usr/local/devel/pglite/cvs/src/doc/manual.me,v 1.16 1995/09/01 23:55:00 jolly Exp
|
||||
*
|
||||
*--------------------------------------------------------------
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "libpq-fe.h"
|
||||
#include "libpq/libpq-fs.h"
|
||||
|
||||
#define BUFSIZE 1024
|
||||
#define BUFSIZE 1024
|
||||
|
||||
/*
|
||||
* importFile * import file "in_filename" into database as large object "lobjOid"
|
||||
*
|
||||
*/
|
||||
Oid importFile(PGconn *conn, char *filename)
|
||||
{
|
||||
Oid lobjId;
|
||||
int lobj_fd;
|
||||
char buf[BUFSIZE];
|
||||
int nbytes, tmp;
|
||||
int fd;
|
||||
/*
|
||||
* importFile * import file "in_filename" into database as large object "lobjOid"
|
||||
*
|
||||
*/
|
||||
Oid importFile(PGconn *conn, char *filename)
|
||||
{
|
||||
Oid lobjId;
|
||||
int lobj_fd;
|
||||
char buf[BUFSIZE];
|
||||
int nbytes, tmp;
|
||||
int fd;
|
||||
|
||||
/*
|
||||
* open the file to be read in
|
||||
*/
|
||||
fd = open(filename, O_RDONLY, 0666);
|
||||
if (fd < 0) { /* error */
|
||||
fprintf(stderr, "can't open unix file %s\n", filename);
|
||||
}
|
||||
/*
|
||||
* open the file to be read in
|
||||
*/
|
||||
fd = open(filename, O_RDONLY, 0666);
|
||||
if (fd < 0) { /* error */
|
||||
fprintf(stderr, "can't open unix file %s\n", filename);
|
||||
}
|
||||
|
||||
/*
|
||||
* create the large object
|
||||
*/
|
||||
lobjId = lo_creat(conn, INV_READ|INV_WRITE);
|
||||
if (lobjId == 0) {
|
||||
fprintf(stderr, "can't create large object\n");
|
||||
}
|
||||
/*
|
||||
* create the large object
|
||||
*/
|
||||
lobjId = lo_creat(conn, INV_READ|INV_WRITE);
|
||||
if (lobjId == 0) {
|
||||
fprintf(stderr, "can't create large object\n");
|
||||
}
|
||||
|
||||
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
|
||||
/*
|
||||
* read in from the Unix file and write to the inversion file
|
||||
*/
|
||||
while ((nbytes = read(fd, buf, BUFSIZE)) > 0) {
|
||||
tmp = lo_write(conn, lobj_fd, buf, nbytes);
|
||||
if (tmp < nbytes) {
|
||||
fprintf(stderr, "error while reading large object\n");
|
||||
}
|
||||
}
|
||||
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
|
||||
/*
|
||||
* read in from the Unix file and write to the inversion file
|
||||
*/
|
||||
while ((nbytes = read(fd, buf, BUFSIZE)) > 0) {
|
||||
tmp = lo_write(conn, lobj_fd, buf, nbytes);
|
||||
if (tmp < nbytes) {
|
||||
fprintf(stderr, "error while reading large object\n");
|
||||
}
|
||||
}
|
||||
|
||||
(void) close(fd);
|
||||
(void) lo_close(conn, lobj_fd);
|
||||
(void) close(fd);
|
||||
(void) lo_close(conn, lobj_fd);
|
||||
|
||||
return lobjId;
|
||||
}
|
||||
return lobjId;
|
||||
}
|
||||
|
||||
void pickout(PGconn *conn, Oid lobjId, int start, int len)
|
||||
{
|
||||
int lobj_fd;
|
||||
char* buf;
|
||||
int nbytes;
|
||||
int nread;
|
||||
void pickout(PGconn *conn, Oid lobjId, int start, int len)
|
||||
{
|
||||
int lobj_fd;
|
||||
char* buf;
|
||||
int nbytes;
|
||||
int nread;
|
||||
|
||||
lobj_fd = lo_open(conn, lobjId, INV_READ);
|
||||
if (lobj_fd < 0) {
|
||||
fprintf(stderr,"can't open large object %d\n",
|
||||
lobjId);
|
||||
}
|
||||
lobj_fd = lo_open(conn, lobjId, INV_READ);
|
||||
if (lobj_fd < 0) {
|
||||
fprintf(stderr,"can't open large object %d\n",
|
||||
lobjId);
|
||||
}
|
||||
|
||||
lo_lseek(conn, lobj_fd, start, SEEK_SET);
|
||||
buf = malloc(len+1);
|
||||
lo_lseek(conn, lobj_fd, start, SEEK_SET);
|
||||
buf = malloc(len+1);
|
||||
|
||||
nread = 0;
|
||||
while (len - nread > 0) {
|
||||
nbytes = lo_read(conn, lobj_fd, buf, len - nread);
|
||||
buf[nbytes] = ' ';
|
||||
fprintf(stderr,">>> %s", buf);
|
||||
nread += nbytes;
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
lo_close(conn, lobj_fd);
|
||||
}
|
||||
nread = 0;
|
||||
while (len - nread > 0) {
|
||||
nbytes = lo_read(conn, lobj_fd, buf, len - nread);
|
||||
buf[nbytes] = ' ';
|
||||
fprintf(stderr,">>> %s", buf);
|
||||
nread += nbytes;
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
lo_close(conn, lobj_fd);
|
||||
}
|
||||
|
||||
void overwrite(PGconn *conn, Oid lobjId, int start, int len)
|
||||
{
|
||||
int lobj_fd;
|
||||
char* buf;
|
||||
int nbytes;
|
||||
int nwritten;
|
||||
int i;
|
||||
void overwrite(PGconn *conn, Oid lobjId, int start, int len)
|
||||
{
|
||||
int lobj_fd;
|
||||
char* buf;
|
||||
int nbytes;
|
||||
int nwritten;
|
||||
int i;
|
||||
|
||||
lobj_fd = lo_open(conn, lobjId, INV_READ);
|
||||
if (lobj_fd < 0) {
|
||||
fprintf(stderr,"can't open large object %d\n",
|
||||
lobjId);
|
||||
}
|
||||
lobj_fd = lo_open(conn, lobjId, INV_READ);
|
||||
if (lobj_fd < 0) {
|
||||
fprintf(stderr,"can't open large object %d\n",
|
||||
lobjId);
|
||||
}
|
||||
|
||||
lo_lseek(conn, lobj_fd, start, SEEK_SET);
|
||||
buf = malloc(len+1);
|
||||
lo_lseek(conn, lobj_fd, start, SEEK_SET);
|
||||
buf = malloc(len+1);
|
||||
|
||||
for (i=0;i<len;i++)
|
||||
buf[i] = 'X';
|
||||
buf[i] = ' ';
|
||||
for (i=0;i<len;i++)
|
||||
buf[i] = 'X';
|
||||
buf[i] = ' ';
|
||||
|
||||
nwritten = 0;
|
||||
while (len - nwritten > 0) {
|
||||
nbytes = lo_write(conn, lobj_fd, buf + nwritten, len - nwritten);
|
||||
nwritten += nbytes;
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
lo_close(conn, lobj_fd);
|
||||
}
|
||||
nwritten = 0;
|
||||
while (len - nwritten > 0) {
|
||||
nbytes = lo_write(conn, lobj_fd, buf + nwritten, len - nwritten);
|
||||
nwritten += nbytes;
|
||||
}
|
||||
fprintf(stderr,"\n");
|
||||
lo_close(conn, lobj_fd);
|
||||
}
|
||||
|
||||
/*
|
||||
* exportFile * export large object "lobjOid" to file "out_filename"
|
||||
*
|
||||
*/
|
||||
void exportFile(PGconn *conn, Oid lobjId, char *filename)
|
||||
{
|
||||
int lobj_fd;
|
||||
char buf[BUFSIZE];
|
||||
int nbytes, tmp;
|
||||
int fd;
|
||||
/*
|
||||
* exportFile * export large object "lobjOid" to file "out_filename"
|
||||
*
|
||||
*/
|
||||
void exportFile(PGconn *conn, Oid lobjId, char *filename)
|
||||
{
|
||||
int lobj_fd;
|
||||
char buf[BUFSIZE];
|
||||
int nbytes, tmp;
|
||||
int fd;
|
||||
|
||||
/*
|
||||
* create an inversion "object"
|
||||
*/
|
||||
lobj_fd = lo_open(conn, lobjId, INV_READ);
|
||||
if (lobj_fd < 0) {
|
||||
fprintf(stderr,"can't open large object %d\n",
|
||||
lobjId);
|
||||
}
|
||||
/*
|
||||
* create an inversion "object"
|
||||
*/
|
||||
lobj_fd = lo_open(conn, lobjId, INV_READ);
|
||||
if (lobj_fd < 0) {
|
||||
fprintf(stderr,"can't open large object %d\n",
|
||||
lobjId);
|
||||
}
|
||||
|
||||
/*
|
||||
* open the file to be written to
|
||||
*/
|
||||
fd = open(filename, O_CREAT|O_WRONLY, 0666);
|
||||
if (fd < 0) { /* error */
|
||||
fprintf(stderr, "can't open unix file %s\n",
|
||||
filename);
|
||||
}
|
||||
/*
|
||||
* open the file to be written to
|
||||
*/
|
||||
fd = open(filename, O_CREAT|O_WRONLY, 0666);
|
||||
if (fd < 0) { /* error */
|
||||
fprintf(stderr, "can't open unix file %s\n",
|
||||
filename);
|
||||
}
|
||||
|
||||
/*
|
||||
* read in from the Unix file and write to the inversion file
|
||||
*/
|
||||
while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) > 0) {
|
||||
tmp = write(fd, buf, nbytes);
|
||||
if (tmp < nbytes) {
|
||||
fprintf(stderr,"error while writing %s\n",
|
||||
filename);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* read in from the Unix file and write to the inversion file
|
||||
*/
|
||||
while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) > 0) {
|
||||
tmp = write(fd, buf, nbytes);
|
||||
if (tmp < nbytes) {
|
||||
fprintf(stderr,"error while writing %s\n",
|
||||
filename);
|
||||
}
|
||||
}
|
||||
|
||||
(void) lo_close(conn, lobj_fd);
|
||||
(void) close(fd);
|
||||
(void) lo_close(conn, lobj_fd);
|
||||
(void) close(fd);
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
exit_nicely(PGconn* conn)
|
||||
{
|
||||
PQfinish(conn);
|
||||
exit(1);
|
||||
}
|
||||
void
|
||||
exit_nicely(PGconn* conn)
|
||||
{
|
||||
PQfinish(conn);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *in_filename, *out_filename;
|
||||
char *database;
|
||||
Oid lobjOid;
|
||||
PGconn *conn;
|
||||
PGresult *res;
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *in_filename, *out_filename;
|
||||
char *database;
|
||||
Oid lobjOid;
|
||||
PGconn *conn;
|
||||
PGresult *res;
|
||||
|
||||
if (argc != 4) {
|
||||
fprintf(stderr, "Usage: %s database_name in_filename out_filename\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
if (argc != 4) {
|
||||
fprintf(stderr, "Usage: %s database_name in_filename out_filename\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
database = argv[1];
|
||||
in_filename = argv[2];
|
||||
out_filename = argv[3];
|
||||
database = argv[1];
|
||||
in_filename = argv[2];
|
||||
out_filename = argv[3];
|
||||
|
||||
/*
|
||||
* set up the connection
|
||||
*/
|
||||
conn = PQsetdb(NULL, NULL, NULL, NULL, database);
|
||||
/*
|
||||
* set up the connection
|
||||
*/
|
||||
conn = PQsetdb(NULL, NULL, NULL, NULL, database);
|
||||
|
||||
/* check to see that the backend connection was successfully made */
|
||||
if (PQstatus(conn) == CONNECTION_BAD) {
|
||||
fprintf(stderr,"Connection to database '%s' failed.\n", database);
|
||||
fprintf(stderr,"%s",PQerrorMessage(conn));
|
||||
exit_nicely(conn);
|
||||
}
|
||||
/* check to see that the backend connection was successfully made */
|
||||
if (PQstatus(conn) == CONNECTION_BAD) {
|
||||
fprintf(stderr,"Connection to database '%s' failed.\n", database);
|
||||
fprintf(stderr,"%s",PQerrorMessage(conn));
|
||||
exit_nicely(conn);
|
||||
}
|
||||
|
||||
res = PQexec(conn, "begin");
|
||||
PQclear(res);
|
||||
res = PQexec(conn, "begin");
|
||||
PQclear(res);
|
||||
|
||||
printf("importing file %s\n", in_filename);
|
||||
/* lobjOid = importFile(conn, in_filename); */
|
||||
lobjOid = lo_import(conn, in_filename);
|
||||
/*
|
||||
printf("as large object %d.\n", lobjOid);
|
||||
printf("importing file %s\n", in_filename);
|
||||
/* lobjOid = importFile(conn, in_filename); */
|
||||
lobjOid = lo_import(conn, in_filename);
|
||||
/*
|
||||
printf("as large object %d.\n", lobjOid);
|
||||
|
||||
printf("picking out bytes 1000-2000 of the large object\n");
|
||||
pickout(conn, lobjOid, 1000, 1000);
|
||||
printf("picking out bytes 1000-2000 of the large object\n");
|
||||
pickout(conn, lobjOid, 1000, 1000);
|
||||
|
||||
printf("overwriting bytes 1000-2000 of the large object with X's\n");
|
||||
overwrite(conn, lobjOid, 1000, 1000);
|
||||
*/
|
||||
printf("overwriting bytes 1000-2000 of the large object with X's\n");
|
||||
overwrite(conn, lobjOid, 1000, 1000);
|
||||
*/
|
||||
|
||||
printf("exporting large object to file %s\n", out_filename);
|
||||
/* exportFile(conn, lobjOid, out_filename); */
|
||||
lo_export(conn, lobjOid,out_filename);
|
||||
printf("exporting large object to file %s\n", out_filename);
|
||||
/* exportFile(conn, lobjOid, out_filename); */
|
||||
lo_export(conn, lobjOid,out_filename);
|
||||
|
||||
res = PQexec(conn, "end");
|
||||
PQclear(res);
|
||||
PQfinish(conn);
|
||||
exit(0);
|
||||
}
|
||||
res = PQexec(conn, "end");
|
||||
PQclear(res);
|
||||
PQfinish(conn);
|
||||
exit(0);
|
||||
}
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/manage-ag.sgml,v 2.7 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/manage-ag.sgml,v 2.8 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="manage-ag">
|
||||
|
@ -133,9 +133,9 @@ Type: \copyright for distribution terms
|
|||
White space (i.e., spaces, tabs and newlines) may be
|
||||
used freely in <acronym>SQL</acronym> queries.
|
||||
Single-line comments are denoted by two dashes
|
||||
(<quote>--</quote>). Everything after the dashes up to the end of the
|
||||
("<literal>--</literal>"). Everything after the dashes up to the end of the
|
||||
line is ignored. Multiple-line comments, and comments within a line,
|
||||
are denoted by <quote>/* ... */</quote>, a convention borrowed
|
||||
are denoted by "<literal>/* ... */</literal>", a convention borrowed
|
||||
from <productname>Ingres</productname>.
|
||||
</para>
|
||||
</sect1>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/manage.sgml,v 1.9 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/manage.sgml,v 1.10 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<Chapter Id="manage">
|
||||
|
@ -46,7 +46,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/manage.sgml,v 1.9 2000/03/31 03:27:41
|
|||
</Para>
|
||||
|
||||
<Para>
|
||||
To create a new database named <Quote>mydb</Quote> from the command line, type
|
||||
To create a new database named <literal>mydb</literal> from the command line, type
|
||||
<ProgramListing>
|
||||
% createdb mydb
|
||||
</ProgramListing>
|
||||
|
@ -93,7 +93,7 @@ ERROR: CREATE DATABASE: Permission denied.
|
|||
Consult with the site administrator
|
||||
regarding preconfigured alternate database locations.
|
||||
Any valid environment variable name may be used to reference an alternate location,
|
||||
although using variable names with a prefix of <quote>PGDATA</quote> is recommended
|
||||
although using variable names with a prefix of <envar>PGDATA</envar> is recommended
|
||||
to avoid confusion
|
||||
and conflict with other variables.
|
||||
</Para>
|
||||
|
@ -185,7 +185,7 @@ enter, edit, and execute <Acronym>SQL</Acronym> commands.
|
|||
library. This allows you to submit <Acronym>SQL</Acronym> commands
|
||||
from C and get answers and status messages back to
|
||||
your program. This interface is discussed further
|
||||
in section ??.
|
||||
in <citetitle>The PostgreSQL Programmer's Guide</citetitle>.
|
||||
</Para>
|
||||
</ListItem>
|
||||
</ItemizedList>
|
||||
|
@ -217,7 +217,7 @@ This prompt indicates that psql is listening
|
|||
to you and that you can type <Acronym>SQL</Acronym> queries into a
|
||||
workspace maintained by the terminal monitor.
|
||||
The <Application>psql</Application> program responds to escape codes that begin
|
||||
with the backslash character, <Quote>\</Quote> For example, you
|
||||
with the backslash character, "<literal>\</literal>". For example, you
|
||||
can get help on the syntax of various
|
||||
<ProductName>PostgreSQL</ProductName> <Acronym>SQL</Acronym> commands by typing:
|
||||
<ProgramListing>
|
||||
|
@ -232,7 +232,7 @@ mydb=> \g
|
|||
</ProgramListing>
|
||||
|
||||
This tells the server to process the query. If you
|
||||
terminate your query with a semicolon, the <Quote>\g</Quote> is not
|
||||
terminate your query with a semicolon, the "<literal>\g</literal>" is not
|
||||
necessary.
|
||||
<Application>psql</Application> will automatically process semicolon terminated queries.
|
||||
To read queries from a file, say myFile, instead of
|
||||
|
@ -251,9 +251,9 @@ mydb=> \q
|
|||
prompt.)
|
||||
White space (i.e., spaces, tabs and newlines) may be
|
||||
used freely in <Acronym>SQL</Acronym> queries. Single-line comments are denoted by
|
||||
<Quote>--</Quote>. Everything after the dashes up to the end of the
|
||||
"<literal>--</literal>". Everything after the dashes up to the end of the
|
||||
line is ignored. Multiple-line comments, and comments within a line,
|
||||
are denoted by <Quote>/* ... */</Quote>
|
||||
are denoted by "<literal>/* ... */</literal>".
|
||||
</Para>
|
||||
|
||||
<Sect2>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/notation.sgml,v 1.9 2000/04/07 13:30:58 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/notation.sgml,v 1.10 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<sect1 id="terminology">
|
||||
|
@ -75,35 +75,35 @@ $Header: /cvsroot/pgsql/doc/src/sgml/notation.sgml,v 1.9 2000/04/07 13:30:58 tho
|
|||
<title>Notation</title>
|
||||
|
||||
<para>
|
||||
<quote>...</quote> or <filename>/usr/local/pgsql/</filename>
|
||||
"<literal>...</literal>" or <filename>/usr/local/pgsql/</filename>
|
||||
at the front of a file name is used to represent the
|
||||
path to the <Productname>Postgres</Productname> superuser's home directory.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In a command synopsis, brackets
|
||||
(<quote>[</quote> and <quote>]</quote>) indicate an optional phrase or keyword.
|
||||
("<literal>[</literal>" and "<literal>]</literal>") indicate an optional phrase or keyword.
|
||||
Anything in braces
|
||||
(<quote>{</quote> and <quote>}</quote>) and containing vertical bars
|
||||
(<quote>|</quote>)
|
||||
("<literal>{</literal>" and "<literal>}</literal>") and containing vertical bars
|
||||
("<literal>|</literal>")
|
||||
indicates that you must choose one.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In examples, parentheses (<quote>(</quote> and <quote>)</quote>) are
|
||||
In examples, parentheses ("<literal>(</literal>" and "<literal>)</literal>") are
|
||||
used to group boolean
|
||||
expressions. <quote>|</quote> is the boolean operator OR.
|
||||
expressions. "<literal>|</literal>" is the boolean operator OR.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Examples will show commands executed from various accounts and programs.
|
||||
Commands executed from the root account will be preceeded with
|
||||
<quote>></quote>.
|
||||
"<literal>></literal>".
|
||||
Commands executed from the <Productname>Postgres</Productname>
|
||||
superuser account will be preceeded with <quote>%</quote>, while commands
|
||||
superuser account will be preceeded with "<literal>%</literal>", while commands
|
||||
executed from an unprivileged user's account will be preceeded with
|
||||
<quote>$</quote>.
|
||||
<acronym>SQL</acronym> commands will be preceeded with <quote>=></quote>
|
||||
"<literal>$</literal>".
|
||||
<acronym>SQL</acronym> commands will be preceeded with "<literal>=></literal>"
|
||||
or will have no leading prompt, depending on the context.
|
||||
</para>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.15 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="odbc">
|
||||
|
@ -125,7 +125,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
can I write it using <acronym>ODBC</acronym> calls
|
||||
to the <productname>Postgres</productname> server,
|
||||
or is that only when another database program
|
||||
like MS SQL Server or Access needs to access the data?</quote>
|
||||
like MS SQL Server or Access needs to access the data?
|
||||
</quote>
|
||||
</para>
|
||||
<para>
|
||||
The <acronym>ODBC</acronym> <acronym>API</acronym>
|
||||
|
@ -171,8 +172,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
<productname>ApplixWare</productname> has an
|
||||
<acronym>ODBC</acronym> database interface
|
||||
supported on at least some platforms.
|
||||
<productname>ApplixWare</productname> v4.4.1 has been
|
||||
demonstrated under Linux with <productname>Postgres</productname> v6.4
|
||||
<productname>ApplixWare</productname> v4.4.2 has been
|
||||
demonstrated under Linux with <productname>Postgres</productname> v7.0
|
||||
using the <productname>psqlODBC</productname>
|
||||
driver contained in the <productname>Postgres</productname> distribution.
|
||||
</para>
|
||||
|
@ -253,20 +254,36 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
command-line argument for <application>src/configure</application>:
|
||||
|
||||
<programlisting>
|
||||
% ./configure --with-odbc
|
||||
% make
|
||||
% ./configure --with-odbc
|
||||
% make
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Rebuild the <productname>Postgres</productname> distribution:
|
||||
|
||||
<programlisting>
|
||||
% make install
|
||||
% make install
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step performance="optional">
|
||||
<para>
|
||||
Install the ODBC catalog extensions available in
|
||||
<filename>PGROOT/contrib/odbc/odbc.sql</filename>:
|
||||
|
||||
<programlisting>
|
||||
% psql -e template1 < $PGROOT/contrib/odbc/odbc.sql
|
||||
</programlisting>
|
||||
|
||||
where specifying <literal>template1</literal> as the target
|
||||
database will ensure that all subsequent new databases will
|
||||
have these same definitions.
|
||||
</para>
|
||||
</step>
|
||||
</procedure>
|
||||
|
||||
<para>
|
||||
|
@ -278,7 +295,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
This can be overridden from the <application>make</application> command-line
|
||||
as
|
||||
<programlisting>
|
||||
% make ODBCINST=<replaceable>filename</replaceable> install
|
||||
% make ODBCINST=<replaceable>filename</replaceable> install
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -304,9 +321,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
sources, type:
|
||||
|
||||
<programlisting>
|
||||
% ./configure
|
||||
% make
|
||||
% make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install
|
||||
% ./configure
|
||||
% make
|
||||
% make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
@ -317,7 +334,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
then you can specify various destinations explicitly:
|
||||
|
||||
<programlisting>
|
||||
% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install
|
||||
% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
@ -368,7 +385,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
or gzipped tarfile to an empty directory. If using the zip package
|
||||
unzip it with the command
|
||||
<programlisting>
|
||||
% unzip -a <replaceable>packagename</replaceable>
|
||||
% unzip -a <replaceable>packagename</replaceable>
|
||||
</programlisting>
|
||||
|
||||
The <option>-a</option> option
|
||||
|
@ -380,7 +397,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
If you have the gzipped tar package than simply run
|
||||
|
||||
<programlisting>
|
||||
tar -xzf <replaceable>packagename</replaceable>
|
||||
% tar -xzf <replaceable>packagename</replaceable>
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -404,8 +421,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
Create the tar file:
|
||||
|
||||
<programlisting>
|
||||
% cd interfaces/odbc
|
||||
% make standalone
|
||||
% cd interfaces/odbc
|
||||
% make standalone
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
@ -429,7 +446,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
Configure the standalone installation:
|
||||
|
||||
<programlisting>
|
||||
% ./configure
|
||||
% ./configure
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -437,8 +454,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
The configuration can be done with options:
|
||||
|
||||
<programlisting>
|
||||
% ./configure --prefix=<replaceable>rootdir</replaceable>
|
||||
--with-odbc=<replaceable>inidir</replaceable>
|
||||
% ./configure --prefix=<replaceable>rootdir</replaceable> --with-odbc=<replaceable>inidir</replaceable>
|
||||
</programlisting>
|
||||
|
||||
where <option>--prefix</option> installs the libraries and headers in
|
||||
|
@ -463,7 +479,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
Compile and link the source code:
|
||||
|
||||
<programlisting>
|
||||
% make ODBCINST=<replaceable>instdir</replaceable>
|
||||
% make ODBCINST=<replaceable>instdir</replaceable>
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -493,7 +509,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
Install the source code:
|
||||
|
||||
<programlisting>
|
||||
% make POSTGRESDIR=<replaceable>targettree</replaceable> install
|
||||
% make POSTGRESDIR=<replaceable>targettree</replaceable> install
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -513,9 +529,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
Here is how you would specify the various destinations explicitly:
|
||||
|
||||
<programlisting>
|
||||
% make BINDIR=<replaceable>bindir</replaceable>
|
||||
LIBDIR<replaceable>>libdi</replaceable>>
|
||||
HEADERDIR=<replaceable>headerdir</replaceable> install
|
||||
% make BINDIR=<replaceable>bindir</replaceable> LIBDIR=<replaceable>libdir</replaceable> HEADERDIR=<replaceable>headerdir</replaceable> install
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -523,7 +537,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
For example, typing
|
||||
|
||||
<programlisting>
|
||||
% make POSTGRESDIR=/opt/psqlodbc install
|
||||
% make POSTGRESDIR=/opt/psqlodbc install
|
||||
</programlisting>
|
||||
|
||||
(after you've used
|
||||
|
@ -537,7 +551,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
The command
|
||||
|
||||
<programlisting>
|
||||
% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install
|
||||
% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install
|
||||
</programlisting>
|
||||
|
||||
should cause the libraries to be installed in /opt/psqlodbc/lib and
|
||||
|
@ -570,10 +584,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.14 2000/03/31 03:27:41
|
|||
<literal>[ODBC Data Sources]</literal> and must contain the following entries:
|
||||
|
||||
<programlisting>
|
||||
Driver = <replaceable>POSTGRESDIR</replaceable>/lib/libpsqlodbc.so
|
||||
Database=<replaceable>DatabaseName</replaceable>
|
||||
Servername=localhost
|
||||
Port=5432
|
||||
Driver = <replaceable>POSTGRESDIR</replaceable>/lib/libpsqlodbc.so
|
||||
Database=<replaceable>DatabaseName</replaceable>
|
||||
Servername=localhost
|
||||
Port=5432
|
||||
</programlisting>
|
||||
|
||||
<tip>
|
||||
|
@ -632,6 +646,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
</programlisting>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>ApplixWare</title>
|
||||
|
||||
|
@ -679,7 +694,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
find the line that starts with
|
||||
|
||||
<programlisting>
|
||||
#libFor elfodbc /ax/<replaceable>...</replaceable>
|
||||
#libFor elfodbc /ax/<replaceable>...</replaceable>
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
@ -688,7 +703,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
Change line to read
|
||||
|
||||
<programlisting>
|
||||
libFor elfodbc <replaceable>applixroot</replaceable>/applix/axdata/axshlib/lib
|
||||
libFor elfodbc <replaceable>applixroot</replaceable>/applix/axdata/axshlib/lib
|
||||
</programlisting>
|
||||
|
||||
which will tell elfodbc to look in this directory
|
||||
|
@ -709,7 +724,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
described above. You may also want to add the flag
|
||||
|
||||
<programlisting>
|
||||
TextAsLongVarchar=0
|
||||
TextAsLongVarchar=0
|
||||
</programlisting>
|
||||
|
||||
to the database-specific portion of <filename>.odbc.ini</filename>
|
||||
|
@ -763,7 +778,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
</substeps>
|
||||
|
||||
<para>
|
||||
You should see <quote>Starting elfodbc server</quote>
|
||||
You should see "<literal>Starting elfodbc server</literal>"
|
||||
in the lower left corner of the
|
||||
data window. If you get an error dialog box, see the debugging section
|
||||
below.
|
||||
|
@ -895,14 +910,14 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
the axnet process. For example, if
|
||||
|
||||
<programlisting>
|
||||
ps -aucx | grep ax
|
||||
% ps -aucx | grep ax
|
||||
</programlisting>
|
||||
|
||||
shows
|
||||
|
||||
<programlisting>
|
||||
cary 10432 0.0 2.6 1740 392 ? S Oct 9 0:00 axnet
|
||||
cary 27883 0.9 31.0 12692 4596 ? S 10:24 0:04 axmain
|
||||
cary 10432 0.0 2.6 1740 392 ? S Oct 9 0:00 axnet
|
||||
cary 27883 0.9 31.0 12692 4596 ? S 10:24 0:04 axmain
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -910,7 +925,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
Then run
|
||||
|
||||
<programlisting>
|
||||
strace -f -s 1024 -p 10432
|
||||
% strace -f -s 1024 -p 10432
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
|
@ -934,16 +949,16 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
|
||||
<para>
|
||||
For example, after getting
|
||||
a <quote>Cannot launch gateway on server</quote>,
|
||||
a "<literal>Cannot launch gateway on server</literal>",
|
||||
I ran strace on axnet and got
|
||||
|
||||
<programlisting>
|
||||
[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
|
||||
(No such file or directory)
|
||||
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
|
||||
(No such file or directory)
|
||||
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
|
||||
can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error)
|
||||
[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
|
||||
(No such file or directory)
|
||||
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
|
||||
(No such file or directory)
|
||||
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
|
||||
can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error)
|
||||
</programlisting>
|
||||
So what is happening is that applix elfodbc is searching for libodbc.so, but it
|
||||
can't find it. That is why axnet.cnf needed to be changed.
|
||||
|
@ -1034,7 +1049,7 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
|
||||
<step performance="required">
|
||||
<para>
|
||||
Enter the value <quote>sqldemo</quote>, then click <command>OK</command>.
|
||||
Enter the value "<literal>sqldemo</literal>", then click <command>OK</command>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -1060,10 +1075,10 @@ InstallDir = /opt/applix/axdata/axshlib
|
|||
<filename>~/axhome/macros/login.am</filename> file:
|
||||
|
||||
<programlisting>
|
||||
macro login
|
||||
set_set_system_var@("sql_username@","tgl")
|
||||
set_system_var@("sql_passwd@","no$way")
|
||||
endmacro
|
||||
macro login
|
||||
set_set_system_var@("sql_username@","tgl")
|
||||
set_system_var@("sql_passwd@","no$way")
|
||||
endmacro
|
||||
</programlisting>
|
||||
|
||||
<caution>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/oper.sgml,v 1.15 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/oper.sgml,v 1.16 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<Chapter Id="operators">
|
||||
|
@ -22,7 +22,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/oper.sgml,v 1.15 2000/03/31 03:27:41
|
|||
</Para>
|
||||
|
||||
<Para>
|
||||
To view all variations of the <Quote>||</Quote> string concatenation operator,
|
||||
To view all variations of the "<literal>||</literal>" string concatenation operator,
|
||||
try
|
||||
<ProgramListing>
|
||||
SELECT oprleft, oprright, oprresult, oprcode
|
||||
|
@ -74,15 +74,9 @@ Operator Ordering (decreasing precedence)
|
|||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>
|
||||
Element
|
||||
</entry>
|
||||
<entry>
|
||||
Precedence
|
||||
</entry>
|
||||
<entry>
|
||||
Description
|
||||
</entry>
|
||||
<entry>Element</entry>
|
||||
<entry>Precedence</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
|
@ -141,6 +135,8 @@ right
|
|||
unary minus
|
||||
</entry>
|
||||
</row>
|
||||
<!--
|
||||
Deprecated as of v7.0
|
||||
<row>
|
||||
<entry>
|
||||
;
|
||||
|
@ -152,6 +148,7 @@ left
|
|||
statement termination, logarithm
|
||||
</entry>
|
||||
</row>
|
||||
-->
|
||||
<row>
|
||||
<entry>
|
||||
:
|
||||
|
@ -283,7 +280,7 @@ string pattern matching
|
|||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
boolean inequality
|
||||
inequality
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -305,7 +302,7 @@ NOT
|
|||
right
|
||||
</entry>
|
||||
<entry>
|
||||
negation
|
||||
logical negation
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
@ -494,11 +491,14 @@ logical union
|
|||
<ENTRY>Natural Exponentiation</ENTRY>
|
||||
<ENTRY>: 3.0</ENTRY>
|
||||
</ROW>
|
||||
<!--
|
||||
Deprecated in v7.0, esp. since ln() is available as a generic function.
|
||||
<ROW>
|
||||
<ENTRY> ; </ENTRY>
|
||||
<ENTRY>Natural Logarithm</ENTRY>
|
||||
<ENTRY>(; 5.0)</ENTRY>
|
||||
</ROW>
|
||||
-->
|
||||
<ROW>
|
||||
<ENTRY> @ </ENTRY>
|
||||
<ENTRY>Absolute value</ENTRY>
|
||||
|
@ -527,8 +527,8 @@ logical union
|
|||
<para>
|
||||
<note>
|
||||
<para>
|
||||
The operators ":" and ";" are deprecated, and will be removed in
|
||||
the near future. Use the equivalent functions exp() and ln()
|
||||
Two operators, ":" and ";", are now deprecated and will be removed in
|
||||
the next release. Use the equivalent functions exp() and ln()
|
||||
instead.
|
||||
</para>
|
||||
</note>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.3 2000/03/31 06:17:21 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.4 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter>
|
||||
|
@ -512,7 +512,7 @@ RETURN <replaceable>expression</replaceable>
|
|||
<programlisting>
|
||||
RAISE <replaceable class="parameter">level</replaceable> <replaceable class="parameter">format</replaceable>'' [, <replaceable class="parameter">identifier</replaceable> [...]];
|
||||
</programlisting>
|
||||
Inside the format, <quote>%</quote> is used as a placeholder for the
|
||||
Inside the format, "<literal>%</literal>" is used as a placeholder for the
|
||||
subsequent comma-separated identifiers. Possible levels are
|
||||
DEBUG (silently suppressed in production running databases), NOTICE
|
||||
(written into the database log and forwarded to the client application)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<title>Ports</title>
|
||||
|
||||
<para>
|
||||
This manual describes version 6.5 of <productname>Postgres</productname>.
|
||||
This manual describes version 7.0 of <productname>Postgres</productname>.
|
||||
The <productname>Postgres</productname> developer community has
|
||||
compiled and tested <productname>Postgres</productname> on a
|
||||
number of platforms. Check
|
||||
|
@ -34,180 +34,171 @@
|
|||
<entry>RS6000</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-05</entry>
|
||||
<entry>(<ulink url="mailto:Andreas.Zeugswetter@telecom.at">Andreas Zeugswetter</ulink>)</entry>
|
||||
<entry><ulink url="mailto:Andreas.Zeugswetter@telecom.at">Andreas Zeugswetter</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>BSDI 4.01</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-04</entry>
|
||||
<entry>(<ulink url="mailto:maillist@candle.pha.pa.us">Bruce Momjian</ulink></entry>
|
||||
<entry><ulink url="mailto:maillist@candle.pha.pa.us">Bruce Momjian</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Compaq Tru64 5.0</entry>
|
||||
<entry>Alpha</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-11</entry>
|
||||
<entry>(<ulink url="mailto:andrew.mcmurry@astro.uio.no">Andrew McMurry</ulink>)</entry>
|
||||
<entry><ulink url="mailto:andrew.mcmurry@astro.uio.no">Andrew McMurry</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>FreeBSD 4.0</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-04</entry>
|
||||
<entry>(<ulink url="mailto:scrappy@hub.org">Marc Fournier</ulink>)</entry>
|
||||
<entry><ulink url="mailto:scrappy@hub.org">Marc Fournier</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>HPUX</entry>
|
||||
<entry>PA-RISC</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-12</entry>
|
||||
<entry>Both 9.0x and 10.20
|
||||
(<ulink url="mailto:tgl@sss.pgh.pa.us">Tom Lane</ulink>)</entry>
|
||||
<entry>Both 9.0x and 10.20.
|
||||
<ulink url="mailto:tgl@sss.pgh.pa.us">Tom Lane</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>IRIX 6.5.6f</entry>
|
||||
<entry>MIPS</entry>
|
||||
<entry>v6.5.3</entry>
|
||||
<entry>2000-02-18</entry>
|
||||
<entry>MIPSPro 7.3.1.1m; full N32 build
|
||||
(<ulink url="hxpro@cinesite.co.uk">Kevin Wheatley</ulink>)</entry>
|
||||
<entry>MIPSPro 7.3.1.1m N32 build.
|
||||
<ulink url="hxpro@cinesite.co.uk">Kevin Wheatley</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Linux 2.0.x</entry>
|
||||
<entry>Alpha</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-05</entry>
|
||||
<entry> With patches
|
||||
(<ulink url="mailto:pgsql@rkirkpat.net">Ryan Kirkpatrick</ulink>)</entry>
|
||||
<entry>With published patches.
|
||||
<ulink url="mailto:pgsql@rkirkpat.net">Ryan Kirkpatrick</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Linux 2.2.x</entry>
|
||||
<entry>armv4l</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-17</entry>
|
||||
<entry>Regression test needs work
|
||||
(<ulink url="mailto:segfault@hardline.org">Mark Knox</ulink>)</entry>
|
||||
<entry>Regression test needs work.
|
||||
<ulink url="mailto:segfault@hardline.org">Mark Knox</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Linux 2.2.x</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-03-26</entry>
|
||||
<entry>(<ulink url="mailto:lamar.owen@wgcr.org">Lamar Owens</ulink>)</entry>
|
||||
<entry><ulink url="mailto:lamar.owen@wgcr.org">Lamar Owens</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Linux 2.0.x</entry>
|
||||
<entry>MIPS</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-13</entry>
|
||||
<entry>Cobalt Qube
|
||||
(<ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink>)</entry>
|
||||
<entry>Cobalt Qube.
|
||||
<ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Linux 2.2.5</entry>
|
||||
<entry>Sparc</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-02</entry>
|
||||
<entry>(<ulink url="mailto:szybist@boxhill.com">Tom Szybist</ulink>)</entry>
|
||||
<entry><ulink url="mailto:szybist@boxhill.com">Tom Szybist</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>LinuxPPC R4</entry>
|
||||
<entry>PPC603e</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-13</entry>
|
||||
<entry>(<ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink>)</entry>
|
||||
<entry><ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>mklinux</entry>
|
||||
<entry>PPC750</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-13</entry>
|
||||
<entry>(<ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink>)</entry>
|
||||
<entry><ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetBSD 1.4</entry>
|
||||
<entry>arm32</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-08</entry>
|
||||
<entry>(<ulink url="mailto:prlw1@newn.cam.ac.uk">Patrick
|
||||
Welche</ulink>)</entry>
|
||||
<entry><ulink url="mailto:prlw1@newn.cam.ac.uk">Patrick
|
||||
Welche</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetBSD 1.4U</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-03-26</entry>
|
||||
<entry>(<ulink url="mailto:prlw1@newn.cam.ac.uk">Patrick
|
||||
Welche</ulink>)</entry>
|
||||
<entry><ulink url="mailto:prlw1@newn.cam.ac.uk">Patrick
|
||||
Welche</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetBSD</entry>
|
||||
<entry>m68k</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-10</entry>
|
||||
<entry>Mac 8xx
|
||||
(<ulink url="mailto:hotz@jpl.nasa.gov">Henry B. Hotz</ulink>)</entry>
|
||||
<entry>Mac 8xx.
|
||||
<ulink url="mailto:hotz@jpl.nasa.gov">Henry B. Hotz</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetBSD/sparc</entry>
|
||||
<entry>Sparc</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-13</entry>
|
||||
<entry>(<ulink url="mailto:tih@kpnQwest.no">Tom I Helbekkmo</ulink>)</entry>
|
||||
<entry><ulink url="mailto:tih@kpnQwest.no">Tom I Helbekkmo</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>QNX 4.25</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-01</entry>
|
||||
<entry>
|
||||
(<ulink url="mailto:kardos@repas-aeg.de">Dr. Andreas Kardos</ulink>)</entry>
|
||||
<entry><ulink url="mailto:kardos@repas-aeg.de">Dr. Andreas Kardos</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SCO OpenServer 5</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v6.5</entry>
|
||||
<entry>1999-05-25</entry>
|
||||
<entry>(<ulink url="mailto:andrew@compclass.com">Andrew Merrill</ulink>)</entry>
|
||||
<entry><ulink url="mailto:andrew@compclass.com">Andrew Merrill</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SCO UnixWare 7</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-18</entry>
|
||||
<entry>See FAQ; needs patch for compiler bug
|
||||
(<ulink url="mailto:Bill.Allie@mug.org">Billy G. Allie</ulink>)</entry>
|
||||
<entry>See FAQ.
|
||||
<ulink url="mailto:Bill.Allie@mug.org">Billy G. Allie</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Solaris</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-12</entry>
|
||||
<entry>(<ulink url="mailto:scrappy@hub.org">Marc Fournier</ulink>)</entry>
|
||||
<entry><ulink url="mailto:scrappy@hub.org">Marc Fournier</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Solaris 2.5.1-2.7</entry>
|
||||
<entry>Sparc</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-12</entry>
|
||||
<entry>(<ulink url="mailto:peter_e@gmx.net">Peter Eisentraut</ulink>,
|
||||
<ulink url="mailto:scrappy@hub.org">Marc Fournier</ulink>)</entry>
|
||||
<entry><ulink url="mailto:peter_e@gmx.net">Peter Eisentraut</ulink>,
|
||||
<ulink url="mailto:scrappy@hub.org">Marc Fournier</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SunOS 4.1.4</entry>
|
||||
<entry>Sparc</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-04-13</entry>
|
||||
<entry>(<ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink>)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SVR4</entry>
|
||||
<entry>MIPS</entry>
|
||||
<entry>v6.4</entry>
|
||||
<entry>1998-10-28</entry>
|
||||
<entry>No 64-bit int compiler support
|
||||
(<ulink url="mailto:ridderbusch.pad@sni.de">Frank Ridderbusch</ulink>)</entry>
|
||||
<entry><ulink url="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Windows/Win32</entry>
|
||||
|
@ -215,15 +206,15 @@
|
|||
<entry>v7.0</entry>
|
||||
<entry>2000-04-02</entry>
|
||||
<entry>Client-side libraries or ODBC/JDBC. No server-side.
|
||||
(<ulink url="mha@sollentuna.net">Magnus Hagander</ulink></entry>
|
||||
<ulink url="mha@sollentuna.net">Magnus Hagander</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>WinNT/Cygwin</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-03-30</entry>
|
||||
<entry>Working with the Cygwin library.
|
||||
(<ulink url="mailto:horak@sit.plzen-city.cz">Daniel Horak</ulink>) </entry>
|
||||
<entry>Uses Cygwin library.
|
||||
<ulink url="mailto:horak@sit.plzen-city.cz">Daniel Horak</ulink>) </entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
|
@ -235,7 +226,8 @@
|
|||
For <productname>Windows NT</productname>,
|
||||
the server-side port of <productname>Postgres</productname> uses
|
||||
the RedHat/Cygnus <productname>Cygwin</productname> library and
|
||||
toolset.
|
||||
toolset. For <productname>Windows 9x</productname>, no
|
||||
server-side port is available due to OS limitations.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
|
@ -256,7 +248,7 @@
|
|||
tested for v7.0 or v6.5.x:
|
||||
|
||||
<table tocentry="1">
|
||||
<title>Obsolete Platforms</title>
|
||||
<title>Unsupported Platforms</title>
|
||||
<tgroup cols="4">
|
||||
<thead>
|
||||
<row>
|
||||
|
@ -268,40 +260,57 @@
|
|||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>BeOS</entry>
|
||||
<entry>x86</entry>
|
||||
<entry>v7.0</entry>
|
||||
<entry>2000-05-01</entry>
|
||||
<entry>Client-side coming soon?
|
||||
<ulink url="mailto:adam@newsnipple.com">Adam Haberlach</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>DGUX 5.4R4.11</entry>
|
||||
<entry>m88k</entry>
|
||||
<entry>v6.3</entry>
|
||||
<entry>1998-03-01</entry>
|
||||
<entry>v6.4 probably OK. Needs new maintainer.
|
||||
(<ulink url="mailto:geek+@cmu.edu">Brian E Gallew</ulink>)</entry>
|
||||
<ulink url="mailto:geek+@cmu.edu">Brian E Gallew</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetBSD-current</entry>
|
||||
<entry>NS32532</entry>
|
||||
<entry>v6.4</entry>
|
||||
<entry>1998-10-27</entry>
|
||||
<entry>small problems in date/time math
|
||||
(<ulink url="mailto:jonb@metronet.com">Jon Buller</ulink>)</entry>
|
||||
<entry>Date math annoyances.
|
||||
<ulink url="mailto:jonb@metronet.com">Jon Buller</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetBSD 1.3</entry>
|
||||
<entry>VAX</entry>
|
||||
<entry>v6.3</entry>
|
||||
<entry>1998-03-01</entry>
|
||||
<entry>(<ulink url="mailto:tih@kpnQwest.no">Tom I Helbekkmo</ulink>)</entry>
|
||||
<entry>v7.0 should work.
|
||||
<ulink url="mailto:tih@kpnQwest.no">Tom I Helbekkmo</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SVR4 4.4</entry>
|
||||
<entry>m88k</entry>
|
||||
<entry>v6.2.1</entry>
|
||||
<entry>1998-03-01</entry>
|
||||
<entry>Confirmed with patching; v6.4.x will need TAS spinlock code
|
||||
(<ulink url="mailto:dlw@seavme.xroads.com">Doug Winterburn</ulink>)</entry>
|
||||
<entry>v6.4.x will need TAS spinlock code.
|
||||
<ulink url="mailto:dlw@seavme.xroads.com">Doug Winterburn</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SVR4</entry>
|
||||
<entry>MIPS</entry>
|
||||
<entry>v6.4</entry>
|
||||
<entry>1998-10-28</entry>
|
||||
<entry>No 64-bit int.
|
||||
<ulink url="mailto:ridderbusch.pad@sni.de">Frank Ridderbusch</ulink></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Ultrix</entry>
|
||||
<entry>MIPS,VAX?</entry>
|
||||
<entry>MIPS, VAX</entry>
|
||||
<entry>v6.x</entry>
|
||||
<entry>1998-03-01</entry>
|
||||
<entry>No recent reports; obsolete?</entry>
|
||||
|
@ -342,8 +351,8 @@
|
|||
<entry>x86</entry>
|
||||
<entry>v6.x</entry>
|
||||
<entry>1998-03-01</entry>
|
||||
<entry>Client-only support; v1.0.9 worked with patches (<ulink
|
||||
url="mailto:dave@turbocat.de">David Wetzel</ulink>)</entry>
|
||||
<entry>Client-only support; v1.0.9 worked with patches
|
||||
<ulink url="mailto:dave@turbocat.de">David Wetzel</ulink></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.35 2000/03/31 03:26:21 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.36 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<!doctype book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
|
||||
|
@ -93,6 +93,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.35 2000/03/31 03:26:21 th
|
|||
<!entity arch-dev SYSTEM "arch-dev.sgml">
|
||||
<!entity biblio SYSTEM "biblio.sgml">
|
||||
<!entity bki SYSTEM "bki.sgml">
|
||||
<!entity catalogs SYSTEM "catalogs.sgml">
|
||||
<!entity compiler SYSTEM "compiler.sgml">
|
||||
<!entity contacts SYSTEM "contacts.sgml">
|
||||
<!entity cvs SYSTEM "cvs.sgml">
|
||||
|
@ -106,27 +107,28 @@ $Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.35 2000/03/31 03:26:21 th
|
|||
<!entity sources SYSTEM "sources.sgml">
|
||||
]>
|
||||
<!-- entity manpages SYSTEM "man/manpages.sgml" subdoc -->
|
||||
<Book Id="postgres">
|
||||
|
||||
<book id="postgres">
|
||||
|
||||
<!-- Title information -->
|
||||
|
||||
<Title>PostgreSQL</Title>
|
||||
<BookInfo>
|
||||
<ReleaseInfo>Covering v6.5 for general release</ReleaseInfo>
|
||||
<BookBiblio>
|
||||
<AuthorGroup>
|
||||
<CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
|
||||
</AuthorGroup>
|
||||
<title>PostgreSQL</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v7.0 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
</authorgroup>
|
||||
<!-- editor in authorgroup is not supported
|
||||
<AuthorGroup>
|
||||
-->
|
||||
<Editor>
|
||||
<FirstName>Thomas</FirstName>
|
||||
<SurName>Lockhart</SurName>
|
||||
<Affiliation>
|
||||
<OrgName>Caltech/JPL</OrgName>
|
||||
</Affiliation>
|
||||
</Editor>
|
||||
<editor>
|
||||
<firstname>Thomas</firstname>
|
||||
<surname>Lockhart</surname>
|
||||
<affiliation>
|
||||
<orgname>Caltech/JPL</orgname>
|
||||
</affiliation>
|
||||
</editor>
|
||||
<!--
|
||||
</AuthorGroup>
|
||||
-->
|
||||
|
@ -135,17 +137,17 @@ $Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.35 2000/03/31 03:26:21 th
|
|||
<AuthorInitials>TGL</AuthorInitials>
|
||||
-->
|
||||
|
||||
<Date>(last updated 1999-06-01)</Date>
|
||||
</BookBiblio>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<LegalNotice>
|
||||
<Para>
|
||||
<ProductName>PostgreSQL</ProductName> is Copyright © 1996-9
|
||||
by the Postgres Global Development Group.
|
||||
</Para>
|
||||
</LegalNotice>
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
</BookInfo>
|
||||
</bookinfo>
|
||||
|
||||
<!--
|
||||
<TOC> </TOC>
|
||||
|
@ -161,27 +163,27 @@ Your name here...
|
|||
-->
|
||||
|
||||
<preface id="preface">
|
||||
<Title>Summary</Title>
|
||||
<title>Summary</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName>,
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<ProductName>PostgreSQL</ProductName> is an
|
||||
<productname>PostgreSQL</productname> is an
|
||||
open-source descendant of this original Berkeley code.
|
||||
</Para>
|
||||
</Preface>
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
<part Id="part-user">
|
||||
<Title>User's Guide</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
<part id="part-user">
|
||||
<title>User's Guide</title>
|
||||
<partintro>
|
||||
<para>
|
||||
Information for users.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
</para>
|
||||
</partintro>
|
||||
|
||||
&intro;
|
||||
&syntax;
|
||||
|
@ -202,15 +204,15 @@ Your name here...
|
|||
&plan;
|
||||
&populate;
|
||||
&commands;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<part Id="part-admin">
|
||||
<Title>Administrator's Guide</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
<part id="part-admin">
|
||||
<title>Administrator's Guide</title>
|
||||
<partintro>
|
||||
<para>
|
||||
Installation and maintenance information.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
</para>
|
||||
</partintro>
|
||||
<!--
|
||||
Disable these extra intro chapters since some elements (e.g. y2k
|
||||
statement) are included in the first intro.sgml and cause errors if
|
||||
|
@ -230,15 +232,15 @@ Your name here...
|
|||
&recovery;
|
||||
®ress;
|
||||
&release;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<part Id="part-programmer">
|
||||
<Title>Programmer's Guide</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
Information for extending <ProductName>Postgres</ProductName>.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
<part id="part-programmer">
|
||||
<title>Programmer's Guide</title>
|
||||
<partintro>
|
||||
<para>
|
||||
Information for extending <productname>Postgres</productname>.
|
||||
</para>
|
||||
</partintro>
|
||||
<!--
|
||||
Disable these extra intro chapters since some elements (e.g. y2k
|
||||
statement) are included in the first intro.sgml and cause errors if
|
||||
|
@ -259,15 +261,15 @@ Your name here...
|
|||
&trigger;
|
||||
&spi;
|
||||
&xplang;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<part Id="part-interfaces">
|
||||
<Title>Interfaces</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
<part id="part-interfaces">
|
||||
<title>Interfaces</title>
|
||||
<partintro>
|
||||
<para>
|
||||
User and programmer interfaces.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
</para>
|
||||
</partintro>
|
||||
&func-ref;
|
||||
&lobj;
|
||||
&ecpg;
|
||||
|
@ -278,48 +280,54 @@ Your name here...
|
|||
&odbc;
|
||||
&jdbc;
|
||||
&lisp;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<part Id="part-developer">
|
||||
<Title>Developer's Guide</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
<part id="part-developer">
|
||||
<title>Developer's Guide</title>
|
||||
<partintro>
|
||||
<para>
|
||||
The Developer's Guide includes discussion of design decisions and
|
||||
suggestions for future development.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
</para>
|
||||
</partintro>
|
||||
&sources;
|
||||
&arch-dev;
|
||||
&options;
|
||||
&geqo;
|
||||
<!--
|
||||
This listing of Postgres catalogs is currently just a copy of the old
|
||||
man page. It is not up to date and has not been marked up for SGML.
|
||||
- thomas 2000-04-20
|
||||
&catalogs;
|
||||
-->
|
||||
&protocol;
|
||||
&signals;
|
||||
&compiler;
|
||||
&bki;
|
||||
&page;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<part Id="part-tutorial">
|
||||
<Title>Tutorial</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
<part id="part-tutorial">
|
||||
<title>Tutorial</title>
|
||||
<partintro>
|
||||
<para>
|
||||
Introduction for new users.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
</para>
|
||||
</partintro>
|
||||
&sql;
|
||||
&arch;
|
||||
&start;
|
||||
&query;
|
||||
&advanced;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<part Id="part-appendix">
|
||||
<Title>Appendices</Title>
|
||||
<PartIntro>
|
||||
<Para>
|
||||
<part id="part-appendix">
|
||||
<title>Appendices</title>
|
||||
<partintro>
|
||||
<para>
|
||||
Additional related information.
|
||||
</Para>
|
||||
</PartIntro>
|
||||
</para>
|
||||
</partintro>
|
||||
|
||||
&datetime;
|
||||
&cvs;
|
||||
|
@ -328,7 +336,7 @@ Your name here...
|
|||
&contacts;
|
||||
-->
|
||||
&biblio;
|
||||
</Part>
|
||||
</part>
|
||||
|
||||
<!--
|
||||
Omit index until we have some index entries.
|
||||
|
@ -337,7 +345,7 @@ Omit index until we have some index entries.
|
|||
</index>
|
||||
-->
|
||||
|
||||
</Book>
|
||||
</book>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<title>Identifying Bugs</title>
|
||||
|
||||
<para>
|
||||
Before you ask <quote>Is this a bug?</quote>, please read and re-read the
|
||||
Before you ask "Is this a bug?", please read and re-read the
|
||||
documentation to verify that you can really do whatever it is you are
|
||||
trying. If it is not clear from the documentation whether you can do
|
||||
something or not, please report that too; it's a bug in the documentation.
|
||||
|
@ -42,7 +42,7 @@
|
|||
<para>
|
||||
A program terminates with a fatal signal or an operating system
|
||||
error message that would point to a problem in the program (a
|
||||
counterexample might be a <quote>disk full</quote> message,
|
||||
counterexample might be a "disk full" message,
|
||||
since that must be fixed outside of <productname>Postgres</productname>).
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -73,7 +73,7 @@
|
|||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
Here <quote>program</quote> refers to any executable, not only the backend server.
|
||||
Here "<literal>program</literal>" refers to any executable, not only the backend server.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -96,7 +96,7 @@
|
|||
<para>
|
||||
The most important thing to remember about bug reporting is to state all
|
||||
the facts and only facts. Do not speculate what you think went wrong, what
|
||||
<quote>it seemed to do</quote>, or which part of the program has a fault.
|
||||
"it seemed to do", or which part of the program has a fault.
|
||||
If you are not familiar with the implementation you would probably guess
|
||||
wrong and not help us a bit. And even if you are, educated explanations are
|
||||
a great supplement to but no substitute for facts. If we are going to fix
|
||||
|
@ -104,7 +104,7 @@
|
|||
Reporting the bare facts
|
||||
is relatively straightforward (you can probably copy and paste them from the
|
||||
screen) but all too often important details are left out because someone
|
||||
thought it doesn't matter or the report would <quote>ring a bell</quote>
|
||||
thought it doesn't matter or the report would be understood
|
||||
anyway.
|
||||
</para>
|
||||
|
||||
|
@ -134,14 +134,15 @@
|
|||
please try to isolate the offending queries. We probably won't set up a
|
||||
web server to reproduce your problem. In any case remember to provide
|
||||
the exact input files, do not guess that the problem happens for
|
||||
<quote>large files</quote> or <quote>mid-size databases</quote>, etc.
|
||||
"large files" or "mid-size databases", etc. since this
|
||||
information is too inexact to be of use.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
The output you got. Please do not say that it <quote>didn't work</quote> or
|
||||
<quote>failed</quote>. If there is an error message,
|
||||
The output you got. Please do not say that it "didn't work" or
|
||||
"failed". If there is an error message,
|
||||
show it, even if you don't understand it. If the program terminates with
|
||||
an operating system error, say which. If nothing at all happens, say so.
|
||||
Even if the result of your test case is a program crash or otherwise obvious
|
||||
|
@ -161,12 +162,12 @@
|
|||
<listitem>
|
||||
<para>
|
||||
The output you expected is very important to state. If you just write
|
||||
<quote>This command gives me that output.</quote> or <quote>This is not
|
||||
what I expected.</quote>, we might run it ourselves, scan the output, and
|
||||
"This command gives me that output." or "This is not
|
||||
what I expected.", we might run it ourselves, scan the output, and
|
||||
think it looks okay and is exactly what we expected. We shouldn't have to
|
||||
spend the time to decode the exact semantics behind your commands.
|
||||
Especially refrain from merely saying that <quote>This is not what SQL says/Oracle
|
||||
does.</quote> Digging out the correct behavior from <acronym>SQL</acronym>
|
||||
Especially refrain from merely saying that "This is not what SQL says/Oracle
|
||||
does." Digging out the correct behavior from <acronym>SQL</acronym>
|
||||
is not a fun undertaking, nor do we all know how all the other relational
|
||||
databases out there behave. (If your problem is a program crash you can
|
||||
obviously omit this item.)
|
||||
|
@ -191,14 +192,15 @@
|
|||
|
||||
<listitem>
|
||||
<para>
|
||||
The PostgreSQL version. You can run the command
|
||||
The <productname>PostgreSQL</productname> version. You can run the command
|
||||
<literal>SELECT version();</literal> to
|
||||
find out. If this function does not exist, say so, then we know that
|
||||
find out what version you are currently running.
|
||||
If this function does not exist, say so, then we know that
|
||||
your version is old enough. If you can't start up the server or a
|
||||
client, look into the README file in the source directory or at the
|
||||
name of your distribution file or package name. If your version is older
|
||||
than 6.5 we will almost certainly tell you to upgrade. There are tons
|
||||
of bugs in old versions, that's why we write new ones.
|
||||
than 7.0 we will almost certainly tell you to upgrade. There are tons
|
||||
of bug fixes in each new version, that's why we write them.
|
||||
</para>
|
||||
<para>
|
||||
If you run a pre-packaged version, such as RPMs, say so, including any
|
||||
|
@ -212,7 +214,7 @@
|
|||
Platform information. This includes the kernel name and version, C library,
|
||||
processor, memory information. In most cases it is sufficient to report
|
||||
the vendor and version, but do not assume everyone knows what exactly
|
||||
<quote>Debian</quote> contains or that everyone runs on Pentiums. If
|
||||
"Debian" contains or that everyone runs on Pentiums. If
|
||||
you have installation problems information about compilers, make, etc.
|
||||
is also necessary.
|
||||
</para>
|
||||
|
@ -235,12 +237,12 @@
|
|||
|
||||
<para>
|
||||
When writing a bug report, please choose non-confusing terminology.
|
||||
The software package as such is called <quote>PostgreSQL</quote>,
|
||||
sometimes <quote>Postgres</quote> for short. (Sometimes
|
||||
the abbreviation <quote>Pgsql</quote> is used but don't do that.) When you
|
||||
The software package as such is called "PostgreSQL",
|
||||
sometimes "Postgres" for short. (Sometimes
|
||||
the abbreviation "Pgsql" is used but don't do that.) When you
|
||||
are specifically talking about the backend server, mention that, don't
|
||||
just say <quote>Postgres crashes</quote>. The interactive frontend is called
|
||||
<quote>psql</quote> and is for all intends and purposes completely separate
|
||||
just say "Postgres crashes". The interactive frontend is called
|
||||
"psql" and is for all intends and purposes completely separate
|
||||
from the backend.
|
||||
</para>
|
||||
</sect2>
|
||||
|
@ -249,35 +251,49 @@
|
|||
<title>Where to report bugs</title>
|
||||
|
||||
<para>
|
||||
In general, send bug reports to <pgsql-bugs@postgresql.org>. You are
|
||||
invited to find a descriptive subject for your email message, perhaps parts
|
||||
of the error message.
|
||||
In general, send bug reports to
|
||||
<ulink url="mailto:pgsql-bugs@postgresql.org">the bug report
|
||||
mailing list</ulink>.
|
||||
You are invited to find a descriptive subject for your email
|
||||
message, perhaps parts of the error message.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Do not send bug reports to any of the user mailing lists, such as
|
||||
pgsql-sql or pgsql-general. These mailing lists are for answering
|
||||
user questions, their subscribers normally do not wish to receive
|
||||
|
||||
<ulink url="mailto:pgsql-sql@postgresql.org">the SQL language
|
||||
mailing list</ulink>
|
||||
or
|
||||
<ulink url="mailto:pgsql-general@postgresql.org">the general topics
|
||||
mailing list</ulink>.
|
||||
These mailing lists are for answering
|
||||
user questions and their subscribers normally do not wish to receive
|
||||
bug reports. More importantly, they are unlikely to fix them.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Also, please do <emphasis>not</emphasis> send reports to
|
||||
<pgsql-hackers@postgresql.org>. This list is for discussing the
|
||||
development of <productname>PostgreSQL</productname>, it would be nice
|
||||
if we could keep the bug reports separate. We might choose take up a
|
||||
<ulink url="mailto:pgsql-hackers@postgresql.org">the developers'
|
||||
mailing list</ulink>.
|
||||
This list is for discussing the
|
||||
development of <productname>PostgreSQL</productname> and it would be nice
|
||||
if we could keep the bug reports separate. We might choose to take up a
|
||||
discussion
|
||||
about your bug report on it, if the bug needs more review.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If you have a problem with the documentation, send email to
|
||||
<pgsql-docs@postgresql.org>. Refer to the document, chapter, and sections.
|
||||
<ulink url="mailto:pgsql-docs@postgresql.org">the documentation
|
||||
mailing list</ulink>.
|
||||
Mention the document, chapter, and sections in your problem report.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If your bug is a portability problem on a non-supported platform, send
|
||||
mail to <pgsql-ports@postgresql.org>, so we (and you) can work on
|
||||
If your bug is a portability problem on a non-supported platform,
|
||||
send mail to
|
||||
<ulink url="mailto:pgsql-ports@postgresql.org">the porting issues mail list</ulink>,
|
||||
so we (and you) can work on
|
||||
porting <productname>PostgreSQL</productname> to your platform.
|
||||
</para>
|
||||
|
||||
|
@ -287,10 +303,11 @@
|
|||
email addresses are closed mailing lists. That is, you need to be
|
||||
subscribed to them in order to be allowed to post. If you simply
|
||||
want to send mail but do not want to receive list traffic, you can
|
||||
subscribe to the special pgsql-loophole <quote>list</quote>, which
|
||||
subscribe to the special pgsql-loophole mailing list, which
|
||||
allows you to post to all <productname>PostgreSQL</productname>
|
||||
mailing lists without receiving any messages. Send email to
|
||||
<pgsql-loophole-request@postgresql.org> to subscribe.
|
||||
<ulink url="mailto:pgsql-loophole-request@postgresql.org">pgsql-loophole-request@postgresql.org</ulink>
|
||||
to subscribe.
|
||||
</para>
|
||||
</note>
|
||||
</sect2>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/programmer.sgml,v 1.25 2000/03/31 03:26:21 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/programmer.sgml,v 1.26 2000/05/02 20:01:52 thomas Exp $
|
||||
|
||||
Postgres Programmer's Guide.
|
||||
-->
|
||||
|
@ -44,6 +44,7 @@ Postgres Programmer's Guide.
|
|||
<!entity arch-dev SYSTEM "arch-dev.sgml">
|
||||
<!entity biblio SYSTEM "biblio.sgml">
|
||||
<!entity bki SYSTEM "bki.sgml">
|
||||
<!entity catalogs SYSTEM "catalogs.sgml">
|
||||
<!entity compiler SYSTEM "compiler.sgml">
|
||||
<!entity contacts SYSTEM "contacts.sgml">
|
||||
<!entity cvs SYSTEM "cvs.sgml">
|
||||
|
@ -62,7 +63,7 @@ Postgres Programmer's Guide.
|
|||
|
||||
<title>PostgreSQL Programmer's Guide</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v6.5 for general release</releaseinfo>
|
||||
<releaseinfo>Covering v7.0 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
|
@ -85,13 +86,13 @@ Postgres Programmer's Guide.
|
|||
<AuthorInitials>TGL</AuthorInitials>
|
||||
-->
|
||||
|
||||
<date>(last updated 1999-06-19)</date>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-9
|
||||
by the Postgres Global Development Group.
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
|
@ -148,29 +149,35 @@ Disable it until we put in some info.
|
|||
&func-ref;
|
||||
-->
|
||||
|
||||
&trigger;
|
||||
&spi;
|
||||
&lobj;
|
||||
&libpq;
|
||||
&libpqpp;
|
||||
&libpgtcl;
|
||||
&libpgeasy;
|
||||
&ecpg;
|
||||
&odbc;
|
||||
&jdbc;
|
||||
&lisp;
|
||||
&trigger;
|
||||
&spi;
|
||||
&lobj;
|
||||
&libpq;
|
||||
&libpqpp;
|
||||
&libpgtcl;
|
||||
&libpgeasy;
|
||||
&ecpg;
|
||||
&odbc;
|
||||
&jdbc;
|
||||
&lisp;
|
||||
|
||||
<!-- development -->
|
||||
|
||||
&sources;
|
||||
&arch-dev;
|
||||
&options;
|
||||
&geqo;
|
||||
&protocol;
|
||||
&signals;
|
||||
&compiler;
|
||||
&bki;
|
||||
&page;
|
||||
&sources;
|
||||
&arch-dev;
|
||||
&options;
|
||||
&geqo;
|
||||
<!--
|
||||
This listing of Postgres catalogs is currently just a copy of the old
|
||||
man page. It is not up to date and has not been marked up for SGML.
|
||||
- thomas 2000-04-20
|
||||
&catalogs;
|
||||
-->
|
||||
&protocol;
|
||||
&signals;
|
||||
&compiler;
|
||||
&bki;
|
||||
&page;
|
||||
|
||||
<!-- appendices -->
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.13 2000/03/27 17:14:42 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.14 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -132,7 +132,7 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable> [ WITH LOCATIO
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><computeroutput>ERROR: Unable to create database directory 'xxx'.</computeroutput></term>
|
||||
<term><computeroutput>ERROR: Unable to create database directory '<replaceable>path</replaceable>'.</computeroutput></term>
|
||||
<term><computeroutput>ERROR: Could not initialize database directory.</computeroutput></term>
|
||||
<listitem>
|
||||
<para>
|
||||
|
@ -164,8 +164,8 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable> [ WITH LOCATIO
|
|||
<para>
|
||||
An alternate location can be specified in order to,
|
||||
for example, store the database on a different disk.
|
||||
The path must have been prepared with the <xref
|
||||
linkend="APP-INITLOCATION" endterm="APP-INITLOCATION-title">
|
||||
The path must have been prepared with the
|
||||
<xref linkend="APP-INITLOCATION" endterm="APP-INITLOCATION-title">
|
||||
command.
|
||||
</para>
|
||||
<para>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.12 2000/04/23 02:08:33 tgl Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.13 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -227,6 +227,11 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||
access methods).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Use <xref linkend="sql-dropindex-title" endterm="sql-dropindex-title">
|
||||
to remove an index.
|
||||
</para>
|
||||
|
||||
<refsect2 id="R2-SQL-CREATEINDEX-3">
|
||||
<refsect2info>
|
||||
<date>1998-09-09</date>
|
||||
|
@ -339,11 +344,6 @@ SELECT am.amname AS acc_name,
|
|||
</refsect2>
|
||||
</refsect1>
|
||||
|
||||
<para>
|
||||
Use <xref linkend="sql-dropindex-title" endterm="sql-dropindex-title">
|
||||
to remove an index.
|
||||
</para>
|
||||
|
||||
<refsect1 id="R1-SQL-CREATEINDEX-2">
|
||||
<title>
|
||||
Usage
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table.sgml,v 1.28 2000/04/15 23:29:58 momjian Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table.sgml,v 1.29 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -905,13 +905,12 @@ ERROR: Cannot insert a duplicate key into a unique index.
|
|||
REFERENCES Constraint
|
||||
</title>
|
||||
<synopsis>
|
||||
[ CONSTRAINT <replaceable class="parameter">name</replaceable> ] REFERENCES
|
||||
<replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> ) ]
|
||||
[ MATCH <replaceable class="parameter">matchtype</replaceable> ]
|
||||
[ ON DELETE <replaceable class="parameter">action</replaceable> ]
|
||||
[ ON UPDATE <replaceable class="parameter">action</replaceable> ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
[ INITIALLY <replaceable class="parameter">checktime</replaceable> ]
|
||||
[ CONSTRAINT <replaceable class="parameter">name</replaceable> ] REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> ) ]
|
||||
[ MATCH <replaceable class="parameter">matchtype</replaceable> ]
|
||||
[ ON DELETE <replaceable class="parameter">action</replaceable> ]
|
||||
[ ON UPDATE <replaceable class="parameter">action</replaceable> ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
[ INITIALLY <replaceable class="parameter">checktime</replaceable> ]
|
||||
</synopsis>
|
||||
<para>
|
||||
The REFERENCES constraint specifies a rule that a column
|
||||
|
@ -1448,14 +1447,13 @@ CREATE TABLE distributors (
|
|||
REFERENCES Constraint
|
||||
</title>
|
||||
<synopsis>
|
||||
[ CONSTRAINT <replaceable class="parameter">name</replaceable> ]
|
||||
FOREIGN KEY ( <replaceable class="parameter">column</replaceable> [, ...] ) REFERENCES
|
||||
<replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> [, ...] ) ]
|
||||
[ MATCH <replaceable class="parameter">matchtype</replaceable> ]
|
||||
[ ON DELETE <replaceable class="parameter">action</replaceable> ]
|
||||
[ ON UPDATE <replaceable class="parameter">action</replaceable> ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
[ INITIALLY <replaceable class="parameter">checktime</replaceable> ]
|
||||
[ CONSTRAINT <replaceable class="parameter">name</replaceable> ] FOREIGN KEY ( <replaceable class="parameter">column</replaceable> [, ...] )
|
||||
REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> [, ...] ) ]
|
||||
[ MATCH <replaceable class="parameter">matchtype</replaceable> ]
|
||||
[ ON DELETE <replaceable class="parameter">action</replaceable> ]
|
||||
[ ON UPDATE <replaceable class="parameter">action</replaceable> ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
[ INITIALLY <replaceable class="parameter">checktime</replaceable> ]
|
||||
</synopsis>
|
||||
<para>
|
||||
The REFERENCES constraint specifies a rule that a column value is
|
||||
|
@ -1901,7 +1899,7 @@ CREATE TEMPORARY TABLE actors (
|
|||
Table Constraint definition:
|
||||
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] UNIQUE ( column [, ...] )
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] UNIQUE ( <replaceable>column</replaceable> [, ...] )
|
||||
[ { INITIALLY DEFERRED | INITIALLY IMMEDIATE } ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -1911,7 +1909,7 @@ CREATE TEMPORARY TABLE actors (
|
|||
Column Constraint definition:
|
||||
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] UNIQUE
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] UNIQUE
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -1928,7 +1926,7 @@ CREATE TEMPORARY TABLE actors (
|
|||
included for symmetry with the NOT NULL clause. Since it is the
|
||||
default for any column, its presence is simply noise.
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] NULL
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] NULL
|
||||
</synopsis>
|
||||
</para>
|
||||
</refsect3>
|
||||
|
@ -1941,7 +1939,7 @@ CREATE TEMPORARY TABLE actors (
|
|||
|
||||
SQL92 specifies some additional capabilities for NOT NULL:
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] NOT NULL
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] NOT NULL
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -1965,9 +1963,7 @@ the column. Not our problem...
|
|||
or a domain.
|
||||
</para>
|
||||
<synopsis>
|
||||
DEFAULT niladic USER function |
|
||||
niladic datetime function |
|
||||
NULL
|
||||
DEFAULT niladic_user_function | niladic_datetime_function | NULL
|
||||
</synopsis>
|
||||
</refsect3>
|
||||
-->
|
||||
|
@ -1994,7 +1990,7 @@ the column. Not our problem...
|
|||
as an alternate method for defining a constraint:
|
||||
</para>
|
||||
<synopsis>
|
||||
CREATE ASSERTION name CHECK ( condition )
|
||||
CREATE ASSERTION <replaceable>name</replaceable> CHECK ( <replaceable>condition</replaceable> )
|
||||
</synopsis>
|
||||
|
||||
<para>
|
||||
|
@ -2005,7 +2001,7 @@ CREATE ASSERTION name CHECK ( condition )
|
|||
Domain constraint:
|
||||
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] CHECK constraint
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] CHECK <replaceable>constraint</replaceable>
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -2015,7 +2011,7 @@ CREATE ASSERTION name CHECK ( condition )
|
|||
Table constraint definition:
|
||||
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] { PRIMARY KEY ( <replaceable class="parameter">column</replaceable>, ... ) | FOREIGN KEY constraint | UNIQUE constraint | CHECK constraint }
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] { PRIMARY KEY ( <replaceable class="parameter">column</replaceable>, ... ) | FOREIGN KEY <replaceable>constraint</replaceable> | UNIQUE <replaceable>constraint</replaceable> | CHECK <replaceable>constraint</replaceable> }
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -2025,7 +2021,7 @@ CREATE ASSERTION name CHECK ( condition )
|
|||
Column constraint definition:
|
||||
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] { NOT NULL | PRIMARY KEY | FOREIGN KEY constraint | UNIQUE | CHECK constraint }
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] { NOT NULL | PRIMARY KEY | FOREIGN KEY <replaceable>constraint</replaceable> | UNIQUE | CHECK <replaceable>constraint</replaceable> }
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -2067,8 +2063,8 @@ CREATE ASSERTION name CHECK ( condition )
|
|||
<term>INITIALLY IMMEDIATE</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Check constraint only at the end of the transaction. This
|
||||
is the default
|
||||
Check constraint only at the end of the transaction. This
|
||||
is the default
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -2076,7 +2072,7 @@ CREATE ASSERTION name CHECK ( condition )
|
|||
<term>INITIALLY DEFERRED</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Check constraint after each statement.
|
||||
Check constraint after each statement.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -2106,7 +2102,7 @@ affect a column or a table.
|
|||
<para>
|
||||
table constraint definition:
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] CHECK ( VALUE condition )
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] CHECK ( VALUE <replaceable>condition</replaceable> )
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -2115,7 +2111,7 @@ affect a column or a table.
|
|||
<para>
|
||||
column constraint definition:
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] CHECK ( VALUE condition )
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] CHECK ( VALUE <replaceable>condition</replaceable> )
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -2125,7 +2121,7 @@ affect a column or a table.
|
|||
domain constraint definition:
|
||||
</para>
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ]
|
||||
[ CONSTRAINT name]
|
||||
CHECK ( VALUE condition )
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
|
@ -2154,7 +2150,7 @@ ALTER DOMAIN cities
|
|||
<para>
|
||||
Table Constraint definition:
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] )
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] PRIMARY KEY ( <replaceable>column</replaceable> [, ...] )
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
@ -2162,7 +2158,7 @@ ALTER DOMAIN cities
|
|||
<para>
|
||||
Column Constraint definition:
|
||||
<synopsis>
|
||||
[ CONSTRAINT name ] PRIMARY KEY
|
||||
[ CONSTRAINT <replaceable>name</replaceable> ] PRIMARY KEY
|
||||
[ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
|
||||
[ [ NOT ] DEFERRABLE ]
|
||||
</synopsis>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/initdb.sgml,v 1.10 2000/03/27 17:14:43 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/initdb.sgml,v 1.11 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -24,11 +24,11 @@ Postgres documentation
|
|||
</refsynopsisdivinfo>
|
||||
<synopsis>
|
||||
initdb [ --pgdata|-D <replaceable class="parameter">dbdir</replaceable> ]
|
||||
[ --sysid|-i <replaceable class="parameter">sysid</replaceable> ]
|
||||
[ --pwprompt|-W ]
|
||||
[ --encoding|-E <replaceable class="parameter">encoding</replaceable> ]
|
||||
[ --pglib|-L <replaceable class="parameter">libdir</replaceable> ]
|
||||
[ --noclean | -n ] [ --debug | -d ] [ --template | -t ]
|
||||
[ --sysid|-i <replaceable class="parameter">sysid</replaceable> ]
|
||||
[ --pwprompt|-W ]
|
||||
[ --encoding|-E <replaceable class="parameter">encoding</replaceable> ]
|
||||
[ --pglib|-L <replaceable class="parameter">libdir</replaceable> ]
|
||||
[ --noclean | -n ] [ --debug | -d ] [ --template | -t ]
|
||||
</synopsis>
|
||||
|
||||
<refsect2 id="R2-APP-INITDB-1">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pgctl-ref.sgml,v 1.1 2000/04/08 02:16:26 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pgctl-ref.sgml,v 1.2 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -28,7 +28,8 @@ Postgres documentation
|
|||
<synopsis>
|
||||
pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>][-p <replaceable class="parameter">path</replaceable>] [-o "<replaceable class="parameter">options</replaceable>"] start
|
||||
pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>] [-m [s[mart]|f[ast]|i[mmediate]]] stop
|
||||
pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>] [-m [s[mart]|f[ast]|i[mmediate]] [-o "<replaceable class="parameter">options</replaceable>"] restart
|
||||
pg_ctl [-w] [-D <replaceable class="parameter">datadir</replaceable>] [-m [s[mart]|f[ast]|i[mmediate]]
|
||||
[-o "<replaceable class="parameter">options</replaceable>"] restart
|
||||
pg_ctl [-D <replaceable class="parameter">datadir</replaceable>] status
|
||||
</synopsis>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/postmaster.sgml,v 1.8 2000/03/26 07:04:54 tgl Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/postmaster.sgml,v 1.9 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -24,8 +24,8 @@ Postgres documentation
|
|||
</refsynopsisdivinfo>
|
||||
<synopsis>
|
||||
postmaster [ -B <replaceable class="parameter">nBuffers</replaceable> ] [ -D <replaceable class="parameter">DataDir</replaceable> ] [ -N <replaceable class="parameter">maxBackends</replaceable> ] [ -S ]
|
||||
[ -d <replaceable class="parameter">DebugLevel</replaceable> ] [ -i ] [ -l ]
|
||||
[ -o <replaceable class="parameter">BackendOptions</replaceable> ] [ -p <replaceable class="parameter">port</replaceable> ] [ -n | -s ]
|
||||
[ -d <replaceable class="parameter">DebugLevel</replaceable> ] [ -i ] [ -l ]
|
||||
[ -o <replaceable class="parameter">BackendOptions</replaceable> ] [ -p <replaceable class="parameter">port</replaceable> ] [ -n | -s ]
|
||||
</synopsis>
|
||||
|
||||
<refsect2 id="R2-APP-POSTMASTER-1">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/vacuumdb.sgml,v 1.8 2000/03/27 17:14:43 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/vacuumdb.sgml,v 1.9 2000/05/02 20:02:03 thomas Exp $
|
||||
Postgres documentation
|
||||
-->
|
||||
|
||||
|
@ -23,8 +23,9 @@ Postgres documentation
|
|||
<date>1999-12-04</date>
|
||||
</refsynopsisdivinfo>
|
||||
<synopsis>
|
||||
vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ --analyze | -z ] [ --alldb | -a ] [ --verbose | -v ]
|
||||
[ --table '<replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column</replaceable> [,...] ) ]' ] [ [-d] <replaceable class="parameter">dbname</replaceable> ]
|
||||
vacuumdb [ <replaceable class="parameter">options</replaceable> ] [ --analyze | -z ]
|
||||
[ --alldb | -a ] [ --verbose | -v ]
|
||||
[ --table '<replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column</replaceable> [,...] ) ]' ] [ [-d] <replaceable class="parameter">dbname</replaceable> ]
|
||||
</synopsis>
|
||||
|
||||
<refsect2 id="R2-APP-VACUUMDB-1">
|
||||
|
@ -39,7 +40,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>[-d, --dbname] <replaceable class="parameter">dbname</replaceable></term>
|
||||
<term>-d <replaceable class="parameter">dbname</replaceable></term>
|
||||
<term>--dbname <replaceable class="parameter">dbname</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Specifies the name of the database to be cleaned or analyzed.
|
||||
|
@ -48,7 +50,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-z, --analyze</term>
|
||||
<term>-z</term>
|
||||
<term>--analyze</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Calculate statistics on the database for use by the optimizer.
|
||||
|
@ -57,7 +60,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-a, --alldb</term>
|
||||
<term>-a</term>
|
||||
<term>--alldb</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Vacuum all databases.
|
||||
|
@ -66,7 +70,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-v, --verbose</term>
|
||||
<term>-v</term>
|
||||
<term>--verbose</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Print detailed information during processing.
|
||||
|
@ -75,7 +80,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-t, --table <replaceable class="parameter">table</replaceable> [ (<replaceable class="parameter">column</replaceable> [,...]) ]</term>
|
||||
<term>-t <replaceable class="parameter">table</replaceable> [ (<replaceable class="parameter">column</replaceable> [,...]) ]</term>
|
||||
<term>--table <replaceable class="parameter">table</replaceable> [ (<replaceable class="parameter">column</replaceable> [,...]) ]</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Clean or analyze <replaceable class="parameter">table</replaceable> only.
|
||||
|
@ -100,7 +106,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>-h, --host <replaceable class="parameter">host</replaceable></term>
|
||||
<term>-h <replaceable class="parameter">host</replaceable></term>
|
||||
<term>--host <replaceable class="parameter">host</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Specifies the hostname of the machine on which the
|
||||
|
@ -111,7 +118,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-p, --port <replaceable class="parameter">port</replaceable></term>
|
||||
<term>-p <replaceable class="parameter">port</replaceable></term>
|
||||
<term>--port <replaceable class="parameter">port</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Specifies the Internet TCP/IP port or local Unix domain socket file
|
||||
|
@ -122,7 +130,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-U, --username <replaceable class="parameter">username</replaceable></term>
|
||||
<term>-U <replaceable class="parameter">username</replaceable></term>
|
||||
<term>--username <replaceable class="parameter">username</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Username to connect as.
|
||||
|
@ -131,7 +140,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-W, --password</term>
|
||||
<term>-W</term>
|
||||
<term>--password</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Force password prompt.
|
||||
|
@ -140,7 +150,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-e, --echo</term>
|
||||
<term>-e</term>
|
||||
<term>--echo</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Echo the commands that <application>vacuumdb</application> generates
|
||||
|
@ -150,7 +161,8 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ -
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-q, --quiet</term>
|
||||
<term>-q</term>
|
||||
<term>--quiet</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Do not display a response.
|
||||
|
|
|
@ -1,34 +1,8 @@
|
|||
<!-- reference.sgml
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/reference.sgml,v 1.7 2000/03/30 22:22:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/reference.sgml,v 1.8 2000/05/02 20:01:52 thomas Exp $
|
||||
|
||||
Postgres User's Reference documentation.
|
||||
- thomas 1998-08-31
|
||||
|
||||
$Log: reference.sgml,v $
|
||||
Revision 1.7 2000/03/30 22:22:41 thomas
|
||||
Accumulated fixups.
|
||||
Add some chapters on new topics.
|
||||
Change to referencing OASIS/Docbook v3.1 rather than Davenport/Docbook v3.0
|
||||
Grepped for and fixed apparent tag mangling from emacs
|
||||
"Normalize" operation. Should be the last of those.
|
||||
|
||||
Revision 1.6 1999/05/26 17:30:30 thomas
|
||||
Add chapters on CVS access, MVCC, SQL theory to the docs.
|
||||
Add an appendix with more details on date/time attributes and handling.
|
||||
Update most references to Postgres version numbers to 6.5,
|
||||
*except* for the porting list which will require a report
|
||||
from a successful installation to be updated.
|
||||
|
||||
Revision 1.5 1998/10/31 09:36:37 thomas
|
||||
Cleanup for v6.4 release.
|
||||
Make new file current.sgml to hold release info for the current release.
|
||||
Should be moved to release.sgml before filling with next release info.
|
||||
|
||||
Revision 1.4 1998/10/30 19:37:12 thomas
|
||||
Minor editing and markup changes as a result of preparing the Postscript
|
||||
documentation for v6.4.
|
||||
Bigger updates to the installation instructions (install and config).
|
||||
|
||||
-->
|
||||
|
||||
<!doctype book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
|
||||
|
@ -40,24 +14,25 @@ Bigger updates to the installation instructions (install and config).
|
|||
<!entity biblio SYSTEM "biblio.sgml">
|
||||
<!entity contacts SYSTEM "contacts.sgml">
|
||||
]>
|
||||
<Book Id="reference">
|
||||
|
||||
<!-- Title information -->
|
||||
<book id="reference">
|
||||
|
||||
<Title>PostgreSQL Reference Manual</Title>
|
||||
<BookInfo>
|
||||
<ReleaseInfo>Covering v6.5 for general release</ReleaseInfo>
|
||||
<BookBiblio>
|
||||
<AuthorGroup>
|
||||
<Author>
|
||||
<FirstName>Jose</FirstName>
|
||||
<SurName>Soares Da Silva</SurName>
|
||||
</Author>
|
||||
<Author>
|
||||
<FirstName>Oliver</FirstName>
|
||||
<SurName>Elphick</SurName>
|
||||
</Author>
|
||||
</AuthorGroup>
|
||||
<!-- Title information -->
|
||||
|
||||
<title>PostgreSQL Reference Manual</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v6.5 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Jose</firstname>
|
||||
<surname>Soares Da Silva</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Oliver</firstname>
|
||||
<surname>Elphick</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<!--
|
||||
<AuthorGroup>
|
||||
<CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
|
||||
|
@ -75,25 +50,25 @@ Bigger updates to the installation instructions (install and config).
|
|||
</Affiliation>
|
||||
</Editor>
|
||||
-->
|
||||
<Editor>
|
||||
<FirstName>Oliver</FirstName>
|
||||
<SurName>Elphick</SurName>
|
||||
</Editor>
|
||||
<editor>
|
||||
<firstname>Oliver</firstname>
|
||||
<surname>Elphick</surname>
|
||||
</editor>
|
||||
<!--
|
||||
</AuthorGroup>
|
||||
-->
|
||||
|
||||
<Date>(last updated 1999-06-01)</Date>
|
||||
</BookBiblio>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<LegalNotice>
|
||||
<Para>
|
||||
<ProductName>PostgreSQL</ProductName> is © 1998-9
|
||||
by the Postgres Global Development Group.
|
||||
</Para>
|
||||
</LegalNotice>
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is © 1998-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
</BookInfo>
|
||||
</bookinfo>
|
||||
|
||||
<!--
|
||||
<TOC> </TOC>
|
||||
|
@ -108,37 +83,53 @@ Your name here...
|
|||
</Dedication>
|
||||
-->
|
||||
|
||||
<Preface Id="preface">
|
||||
<Title>Summary</Title>
|
||||
<preface id="preface">
|
||||
<title>Summary</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<ProductName>PostgreSQL</ProductName> is a public-domain, open source descendant
|
||||
of this original Berkeley code.
|
||||
</Para>
|
||||
</Preface>
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<productname>PostgreSQL</productname> is a public-domain, open source descendant
|
||||
of this original Berkeley code.
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
<!--
|
||||
&intro-ref;
|
||||
-->
|
||||
|
||||
&commands;
|
||||
&commands;
|
||||
|
||||
<!--
|
||||
&contacts;
|
||||
-->
|
||||
|
||||
&biblio;
|
||||
&biblio;
|
||||
|
||||
<!--
|
||||
<index Id="index">
|
||||
</index>
|
||||
-->
|
||||
|
||||
</Book>
|
||||
</book>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,267 +1,314 @@
|
|||
<Chapter Id="regress">
|
||||
<Title id="regress-title">Regression Test</Title>
|
||||
<chapter id="regress">
|
||||
<title id="regress-title">Regression Test</title>
|
||||
|
||||
<Abstract>
|
||||
<Para>
|
||||
Regression test instructions and analysis.
|
||||
</Para>
|
||||
</Abstract>
|
||||
<abstract>
|
||||
<para>
|
||||
Regression test instructions and analysis.
|
||||
</para>
|
||||
</abstract>
|
||||
|
||||
<Para>
|
||||
The PostgreSQL regression tests are a comprehensive set of tests for the
|
||||
SQL implementation embedded in PostgreSQL. They test standard SQL
|
||||
operations as well as the extended capabilities of PostgreSQL.
|
||||
</Para>
|
||||
<para>
|
||||
The PostgreSQL regression tests are a comprehensive set of tests for the
|
||||
SQL implementation embedded in PostgreSQL. They test standard SQL
|
||||
operations as well as the extended capabilities of PostgreSQL.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
There are two different ways in which the regression tests can be run:
|
||||
the "sequential" method and the "parallel" method. The sequential method
|
||||
runs each test script in turn, whereas the parallel method starts up
|
||||
multiple server processes to run groups of tests in parallel. Parallel
|
||||
testing gives confidence that interprocess communication and locking
|
||||
are working correctly. Another key difference is that the sequential
|
||||
test procedure uses an already-installed postmaster, whereas the
|
||||
parallel test procedure tests a system that has been built but not yet
|
||||
installed. (The parallel test script actually does an installation into
|
||||
a temporary directory and fires up a private postmaster therein.)
|
||||
</Para>
|
||||
<para>
|
||||
There are two different ways in which the regression tests can be run:
|
||||
the "sequential" method and the "parallel" method. The sequential method
|
||||
runs each test script in turn, whereas the parallel method starts up
|
||||
multiple server processes to run groups of tests in parallel. Parallel
|
||||
testing gives confidence that interprocess communication and locking
|
||||
are working correctly. Another key difference is that the sequential
|
||||
test procedure uses an already-installed postmaster, whereas the
|
||||
parallel test procedure tests a system that has been built but not yet
|
||||
installed. (The parallel test script actually does an installation into
|
||||
a temporary directory and fires up a private postmaster therein.)
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
Some properly installed and fully functional PostgreSQL installations
|
||||
can "fail" some of these regression tests due to artifacts of floating point
|
||||
representation and time zone support. The tests are currently evaluated
|
||||
using a simple <application>diff</application> comparison against the
|
||||
outputs generated on a reference system, so the results are sensitive to
|
||||
small system differences.
|
||||
When a test is reported as "failed", always examine the differences
|
||||
between expected and actual results; you may well find that the differences
|
||||
are not significant.
|
||||
</Para>
|
||||
<para>
|
||||
Some properly installed and fully functional PostgreSQL installations
|
||||
can "fail" some of these regression tests due to artifacts of floating point
|
||||
representation and time zone support. The tests are currently evaluated
|
||||
using a simple <application>diff</application> comparison against the
|
||||
outputs generated on a reference system, so the results are sensitive to
|
||||
small system differences.
|
||||
When a test is reported as "failed", always examine the differences
|
||||
between expected and actual results; you may well find that the differences
|
||||
are not significant.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
The regression tests were originally developed by Jolly Chen and Andrew Yu,
|
||||
and were extensively revised/repackaged by Marc Fournier and Thomas Lockhart.
|
||||
From <ProductName>PostgreSQL</ProductName> v6.1 onward
|
||||
the regression tests are current for every official release.
|
||||
</Para>
|
||||
<para>
|
||||
The regression tests were originally developed by Jolly Chen and Andrew Yu,
|
||||
and were extensively revised/repackaged by Marc Fournier and Thomas Lockhart.
|
||||
From <productname>PostgreSQL</productname> v6.1 onward
|
||||
the regression tests are current for every official release.
|
||||
</para>
|
||||
|
||||
<Sect1>
|
||||
<Title>Regression Environment</Title>
|
||||
<sect1>
|
||||
<title>Regression Environment</title>
|
||||
|
||||
<Para>
|
||||
The regression testing notes below assume the following (except where noted):
|
||||
<ItemizedList Mark="bullet" Spacing="compact">
|
||||
<ListItem>
|
||||
<Para>
|
||||
Commands are Unix-compatible. See note below.
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para>
|
||||
Defaults are used except where noted.
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para>
|
||||
User postgres is the <ProductName>Postgres</ProductName> superuser.
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para>
|
||||
The source path is /usr/src/pgsql (other paths are possible).
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para>
|
||||
The runtime path is /usr/local/pgsql (other paths are possible).
|
||||
</Para>
|
||||
</ListItem>
|
||||
</ItemizedList>
|
||||
</Para>
|
||||
<para>
|
||||
The regression testing notes below assume the following (except where noted):
|
||||
<itemizedlist spacing="compact" mark="bullet">
|
||||
<listitem>
|
||||
<para>
|
||||
Commands are Unix-compatible. See note below.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Defaults are used except where noted.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
User postgres is the <productname>Postgres</productname> superuser.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The source path is /usr/src/pgsql (other paths are possible).
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The runtime path is /usr/local/pgsql (other paths are possible).
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
Normally, the regression tests should be run as the postgres user since
|
||||
the 'src/test/regress' directory and sub-directories are owned by the
|
||||
postgres user. If you run the regression test as another user the
|
||||
'src/test/regress' directory tree must be writeable by that user.
|
||||
</Para>
|
||||
<para>
|
||||
Normally, the regression tests should be run as the postgres user since
|
||||
the 'src/test/regress' directory and sub-directories are owned by the
|
||||
postgres user. If you run the regression test as another user the
|
||||
'src/test/regress' directory tree must be writeable by that user.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
It was formerly necessary to run the postmaster with system time zone
|
||||
set to PST, but this is no longer required. You can run the regression
|
||||
tests under your normal postmaster configuration. The test script will
|
||||
set the PGTZ environment variable to ensure that timezone-dependent tests
|
||||
produce the expected results. However, your system must provide
|
||||
library support for the PST8PDT time zone, or the timezone-dependent
|
||||
tests will fail.
|
||||
To verify that your machine does have this support, type
|
||||
the following:
|
||||
<ProgramListing>
|
||||
setenv TZ PST8PDT
|
||||
date
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
<para>
|
||||
It was formerly necessary to run the postmaster with system time zone
|
||||
set to PST, but this is no longer required. You can run the regression
|
||||
tests under your normal postmaster configuration. The test script will
|
||||
set the PGTZ environment variable to ensure that timezone-dependent tests
|
||||
produce the expected results. However, your system must provide
|
||||
library support for the PST8PDT time zone, or the timezone-dependent
|
||||
tests will fail.
|
||||
To verify that your machine does have this support, type
|
||||
the following:
|
||||
|
||||
<Para>
|
||||
The "date" command above should have returned the current system time
|
||||
in the PST8PDT time zone. If the PST8PDT database is not available, then
|
||||
your system may have returned the time in GMT. If the PST8PDT time zone
|
||||
is not available, you can set the time zone rules explicitly:
|
||||
<ProgramListing>
|
||||
setenv PGTZ PST8PDT7,M04.01.0,M10.05.03
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
<programlisting>
|
||||
setenv TZ PST8PDT
|
||||
date
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The "date" command above should have returned the current system time
|
||||
in the PST8PDT time zone. If the PST8PDT database is not available, then
|
||||
your system may have returned the time in GMT. If the PST8PDT time zone
|
||||
is not available, you can set the time zone rules explicitly:
|
||||
<programlisting>
|
||||
setenv PGTZ PST8PDT7,M04.01.0,M10.05.03
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The directory layout for the regression test area is:
|
||||
|
||||
<table tocentry="1">
|
||||
<title>Directory Layout</title>
|
||||
|
||||
<titleabbrev>Kerberos</titleabbrev>
|
||||
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Directory</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>Directory</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>input</entry>
|
||||
<entry>
|
||||
Source files that are converted using
|
||||
<command>make all</command> into
|
||||
some of the <filename>.sql</filename> files in the
|
||||
<filename>sql</filename> subdirectory.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>output</entry>
|
||||
<entry>
|
||||
Source files that are converted using
|
||||
<command>make all</command> into
|
||||
<filename>.out</filename> files in the
|
||||
<filename>expected</filename> subdirectory.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>sql</entry>
|
||||
<entry>
|
||||
<filename>.sql</filename> files used to perform the
|
||||
regression tests.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>expected</entry>
|
||||
<entry>
|
||||
<filename>.out</filename> files that represent what we
|
||||
<emphasis>expect</emphasis> the results to
|
||||
look like.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>results</entry>
|
||||
<entry>
|
||||
<filename>.out</filename> files that contain what the results
|
||||
<emphasis>actually</emphasis> look
|
||||
like. Also used as temporary storage for table copy testing.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>tmp_check</entry>
|
||||
<entry>
|
||||
Temporary installation created by parallel testing script.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Directory Layout</Title>
|
||||
<sect1>
|
||||
<title>Regression Test Procedure</title>
|
||||
|
||||
<Para>
|
||||
<Note>
|
||||
<Para>
|
||||
This should become a table in the previous section.
|
||||
</Para>
|
||||
</Note>
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
<ProgramListing>
|
||||
input/ .... .source files that are converted using 'make all' into
|
||||
some of the .sql files in the 'sql' subdirectory
|
||||
|
||||
output/ ... .source files that are converted using 'make all' into
|
||||
.out files in the 'expected' subdirectory
|
||||
|
||||
sql/ ...... .sql files used to perform the regression tests
|
||||
|
||||
expected/ . .out files that represent what we *expect* the results to
|
||||
look like
|
||||
|
||||
results/ .. .out files that contain what the results *actually* look
|
||||
like. Also used as temporary storage for table copy testing.
|
||||
|
||||
tmp_check/ temporary installation created by parallel testing script.
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</Sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Regression Test Procedure</Title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Commands were tested on RedHat Linux version 4.2 using the bash shell.
|
||||
Except where noted, they will probably work on most systems. Commands
|
||||
like <FileName>ps</FileName> and <FileName>tar</FileName> vary wildly on what options you should use on each
|
||||
platform. <Emphasis>Use common sense</Emphasis> before typing in these commands.
|
||||
</Para>
|
||||
like <filename>ps</filename> and <filename>tar</filename> vary
|
||||
wildly on what options you should use on each
|
||||
platform. <emphasis>Use common sense</emphasis> before typing in these commands.
|
||||
</para>
|
||||
|
||||
<Procedure>
|
||||
<Title><ProductName>Postgres</ProductName> Regression Test</Title>
|
||||
<procedure>
|
||||
<title><productname>Postgres</productname> Regression Test</title>
|
||||
|
||||
<Step Performance="required">
|
||||
<Para>
|
||||
<step performance="required">
|
||||
<para>
|
||||
Prepare the files needed for the regression test with:
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
cd /usr/src/pgsql/src/test/regress
|
||||
gmake clean
|
||||
gmake all
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
You can skip "gmake clean" if this is the first time you
|
||||
are running the tests.
|
||||
</para>
|
||||
<Para>
|
||||
This step compiles a <Acronym>C</Acronym>
|
||||
<para>
|
||||
This step compiles a <acronym>C</acronym>
|
||||
program with PostgreSQL extension functions into a shared library.
|
||||
Localized SQL scripts and output-comparison files are also created
|
||||
for the tests that need them. The localization replaces macros in
|
||||
the source files with absolute pathnames and user names.
|
||||
</Para>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<Step Performance="optional">
|
||||
<Para>
|
||||
<step performance="optional">
|
||||
<para>
|
||||
If you intend to use the "sequential" test procedure, which tests
|
||||
an already-installed postmaster, be sure that the postmaster
|
||||
is running. If it isn't already running,
|
||||
start the postmaster in an available window by typing
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
postmaster
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
or start the postmaster daemon running in the background by typing
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
cd
|
||||
nohup postmaster > regress.log 2>&1 &
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
The latter is probably preferable, since the regression test log
|
||||
will be quite lengthy (60K or so, in
|
||||
<ProductName>Postgres</ProductName> 7.0) and you might want to
|
||||
<productname>Postgres</productname> 7.0) and you might want to
|
||||
review it for clues if things go wrong.
|
||||
|
||||
<Note>
|
||||
<Para>
|
||||
Do not run <FileName>postmaster</FileName> from the root account.
|
||||
</Para>
|
||||
</Note>
|
||||
</Para>
|
||||
</Step>
|
||||
<note>
|
||||
<para>
|
||||
Do not run <filename>postmaster</filename> from the root account.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<Step Performance="required">
|
||||
<Para>
|
||||
<step performance="required">
|
||||
<para>
|
||||
Run the regression tests. For a sequential test, type
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
cd /usr/src/pgsql/src/test/regress
|
||||
gmake runtest
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
For a parallel test, type
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
cd /usr/src/pgsql/src/test/regress
|
||||
gmake runcheck
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
The sequential test just runs the test scripts using your
|
||||
already-running postmaster.
|
||||
The parallel test will perform a complete installation of
|
||||
<ProductName>Postgres</ProductName> into a temporary directory,
|
||||
<productname>Postgres</productname> into a temporary directory,
|
||||
start a private postmaster therein, and then run the test scripts.
|
||||
Finally it will kill the private postmaster (but the temporary
|
||||
directory isn't removed automatically).
|
||||
</Para>
|
||||
</Step>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<Step Performance="required">
|
||||
<Para>
|
||||
<step performance="required">
|
||||
<para>
|
||||
You should get on the screen (and also written to file ./regress.out)
|
||||
a series of statements stating which tests passed and which tests
|
||||
failed. Please note that it can be normal for some of the tests to
|
||||
"fail" due to platform-specific variations. See the next section
|
||||
for details on determining whether a "failure" is significant.
|
||||
</Para>
|
||||
<Para>
|
||||
</para>
|
||||
<para>
|
||||
Some of the tests, notably "numeric", can take a while, especially
|
||||
on slower platforms. Have patience.
|
||||
</Para>
|
||||
</Step>
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<Step Performance="required">
|
||||
<Para>
|
||||
<step performance="required">
|
||||
<para>
|
||||
After running the tests and examining the results, type
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
cd /usr/src/pgsql/src/test/regress
|
||||
gmake clean
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
to recover the temporary disk space used by the tests.
|
||||
If you ran a sequential test, also type
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
dropdb regression
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</Step>
|
||||
</programlisting>
|
||||
</para>
|
||||
</step>
|
||||
</procedure>
|
||||
</Sect1>
|
||||
</sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Regression Analysis</Title>
|
||||
<sect1>
|
||||
<title>Regression Analysis</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
The actual outputs of the regression tests are in files in the
|
||||
<filename>./results</filename> directory. The test script
|
||||
uses <application>diff</application> to compare each output file
|
||||
|
@ -270,101 +317,101 @@ The runtime path is /usr/local/pgsql (other paths are possible).
|
|||
saved for your inspection in
|
||||
<filename>./regression.diffs</filename>. (Or you can run
|
||||
<application>diff</application> yourself, if you prefer.)
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
The files might not compare exactly. The test script will report
|
||||
any difference as a "failure", but the difference might be due
|
||||
to small cross-system differences in error message wording,
|
||||
math library behavior, etc.
|
||||
"Failures" of this type do not indicate a problem with
|
||||
<ProductName>Postgres</ProductName>.
|
||||
</Para>
|
||||
<productname>Postgres</productname>.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Thus, it is necessary to examine the actual differences for each
|
||||
"failed" test to determine whether there is really a problem.
|
||||
The following paragraphs attempt to provide some guidance in
|
||||
determining whether a difference is significant or not.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Sect2>
|
||||
<Title>Error message differences</Title>
|
||||
<sect2>
|
||||
<title>Error message differences</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Some of the regression tests involve intentional invalid input values.
|
||||
Error messages can come from either the Postgres code or from the host
|
||||
platform system routines. In the latter case, the messages may vary
|
||||
between platforms, but should reflect similar information. These
|
||||
differences in messages will result in a "failed" regression test which
|
||||
can be validated by inspection.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
</Sect2>
|
||||
</sect2>
|
||||
|
||||
<Sect2>
|
||||
<Title>Date and time differences</Title>
|
||||
<sect2>
|
||||
<title>Date and time differences</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Most of the date and time results are dependent on timezone environment.
|
||||
The reference files are generated for timezone PST8PDT (Berkeley,
|
||||
California) and there will be apparent failures if the tests are not
|
||||
run with that timezone setting. The regression test driver sets
|
||||
environment variable PGTZ to PST8PDT to ensure proper results.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Some of the queries in the "timestamp" test will fail if you run
|
||||
the test on the day of a daylight-savings time changeover, or the
|
||||
day before or after one. These queries assume that the intervals
|
||||
between midnight yesterday, midnight today and midnight tomorrow are
|
||||
exactly twenty-four hours ... which is wrong if daylight-savings time
|
||||
went into or out of effect meanwhile.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
There appear to be some systems which do not accept the recommended syntax
|
||||
for explicitly setting the local time zone rules; you may need to use
|
||||
a different PGTZ setting on such machines.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Some systems using older timezone libraries fail to apply daylight-savings
|
||||
corrections to pre-1970 dates, causing pre-1970 PDT times to be displayed
|
||||
in PST instead. This will result in localized differences in the test
|
||||
results.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
</Sect2>
|
||||
</sect2>
|
||||
|
||||
<Sect2>
|
||||
<Title>Floating point differences</Title>
|
||||
<sect2>
|
||||
<title>Floating point differences</title>
|
||||
|
||||
<Para>
|
||||
Some of the tests involve computing 64-bit (<Type>float8</Type>) numbers from table
|
||||
<para>
|
||||
Some of the tests involve computing 64-bit (<type>float8</type>) numbers from table
|
||||
columns. Differences in results involving mathematical functions of
|
||||
<Type>float8</Type> columns have been observed. The float8
|
||||
<type>float8</type> columns have been observed. The float8
|
||||
and geometry tests are particularly prone to small differences
|
||||
across platforms.
|
||||
Human eyeball comparison is needed to determine the real significance
|
||||
of these differences which are usually 10 places to the right of
|
||||
the decimal point.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Some systems signal errors from pow() and exp() differently from
|
||||
the mechanism expected by the current Postgres code.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
</Sect2>
|
||||
</sect2>
|
||||
|
||||
<Sect2>
|
||||
<Title>Polygon differences</Title>
|
||||
<sect2>
|
||||
<title>Polygon differences</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Several of the tests involve operations on geographic date about the
|
||||
Oakland/Berkley CA street map. The map data is expressed as polygons
|
||||
whose vertices are represented as pairs of <Type>float8</Type> numbers (decimal
|
||||
whose vertices are represented as pairs of <type>float8</type> numbers (decimal
|
||||
latitude and longitude). Initially, some tables are created and
|
||||
loaded with geographic data, then some views are created which join
|
||||
two tables using the polygon intersection operator (##), then a select
|
||||
|
@ -374,65 +421,65 @@ The runtime path is /usr/local/pgsql (other paths are possible).
|
|||
in the 2nd or 3rd place to the right of the decimal point. The SQL
|
||||
statements where these problems occur are the following:
|
||||
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
QUERY: SELECT * from street;
|
||||
QUERY: SELECT * from iexit;
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
</Sect2>
|
||||
</sect2>
|
||||
|
||||
<Sect2>
|
||||
<Title>Random differences</Title>
|
||||
<sect2>
|
||||
<title>Random differences</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
There is at least one case in the "random" test script that is
|
||||
intended to produce
|
||||
random results. This causes random to fail the regression test
|
||||
once in a while (perhaps once in every five to ten trials).
|
||||
Typing
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
diff results/random.out expected/random.out
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
should produce only one or a few lines of differences. You need
|
||||
not worry unless the random test always fails in repeated attempts.
|
||||
(On the other hand, if the random test is <emphasis>never</emphasis>
|
||||
reported to fail even in many trials of the regress tests, you
|
||||
probably <emphasis>should</emphasis> worry.)
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
</Sect2>
|
||||
</sect2>
|
||||
|
||||
<Sect2>
|
||||
<Title>The <Quote>expected</Quote> files</Title>
|
||||
<sect2>
|
||||
<title>The "expected" files</title>
|
||||
|
||||
<Para>
|
||||
The <FileName>./expected/*.out</FileName> files were adapted from the original monolithic
|
||||
<FileName>expected.input</FileName> file provided by Jolly Chen et al. Newer versions of these
|
||||
<para>
|
||||
The <filename>./expected/*.out</filename> files were adapted from the original monolithic
|
||||
<filename>expected.input</filename> file provided by Jolly Chen et al. Newer versions of these
|
||||
files generated on various development machines have been substituted after
|
||||
careful (?) inspection. Many of the development machines are running a
|
||||
Unix OS variant (FreeBSD, Linux, etc) on Ix86 hardware.
|
||||
|
||||
The original <FileName>expected.input</FileName> file was created on a SPARC Solaris 2.4
|
||||
system using the <FileName>postgres5-1.02a5.tar.gz</FileName> source tree. It was compared
|
||||
The original <filename>expected.input</filename> file was created on a SPARC Solaris 2.4
|
||||
system using the <filename>postgres5-1.02a5.tar.gz</filename> source tree. It was compared
|
||||
with a file created on an I386 Solaris 2.4 system and the differences
|
||||
were only in the floating point polygons in the 3rd digit to the right
|
||||
of the decimal point.
|
||||
|
||||
The original <FileName>sample.regress.out</FileName> file was from the postgres-1.01 release
|
||||
The original <filename>sample.regress.out</filename> file was from the postgres-1.01 release
|
||||
constructed by Jolly Chen. It may
|
||||
have been created on a DEC ALPHA machine as the <FileName>Makefile.global</FileName>
|
||||
have been created on a DEC ALPHA machine as the <filename>Makefile.global</filename>
|
||||
in the postgres-1.01 release has PORTNAME=alpha.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
</Sect2>
|
||||
</sect2>
|
||||
|
||||
</Sect1>
|
||||
</sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Platform-specific comparison files</Title>
|
||||
<sect1>
|
||||
<title>Platform-specific comparison files</title>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Since some of the tests inherently produce platform-specific results,
|
||||
we have provided a way to supply platform-specific result comparison
|
||||
files. Frequently, the same variation applies to multiple platforms;
|
||||
|
@ -441,42 +488,59 @@ The runtime path is /usr/local/pgsql (other paths are possible).
|
|||
So, to eliminate bogus test "failures" for a particular platform,
|
||||
you must choose or make a variant result file, and then add a line
|
||||
to the mapping file, which is "resultmap".
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
Each line in the mapping file is of the form
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
testname/platformnamepattern=comparisonfilename
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
The test name is just the name of the particular regression test module.
|
||||
The platform name pattern is a pattern in the style of expr(1) (that is,
|
||||
a regular expression with an implicit ^ anchor at the start). It is matched
|
||||
against the platform name as printed by config.guess. The comparison
|
||||
file name is the name of the substitute result comparison file.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<para>
|
||||
For example: the int2 regress test includes a deliberate entry of a value
|
||||
that is too large to fit in int2. The specific error message that is
|
||||
produced is platform-dependent; our reference platform emits
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
ERROR: pg_atoi: error reading "100000": Numerical result out of range
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
but a fair number of other Unix platforms emit
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
ERROR: pg_atoi: error reading "100000": Result too large
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
Therefore, we provide a variant comparison file, int2-too-large.out,
|
||||
that includes this spelling of the error message. To silence the
|
||||
bogus "failure" message on HPPA platforms, resultmap includes
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
int2/hppa=int2-too-large
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
which will trigger on any machine for which config.guess's output
|
||||
begins with 'hppa'. Other lines in resultmap select the variant
|
||||
comparison file for other platforms where it's appropriate.
|
||||
</Para>
|
||||
</para>
|
||||
|
||||
</Sect1>
|
||||
</sect1>
|
||||
|
||||
</Chapter>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 momjian Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.47 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="release">
|
||||
|
@ -19,9 +19,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 mom
|
|||
</docinfo>
|
||||
-->
|
||||
<para>
|
||||
This release shows the continued growth of PostgreSQL. There are more
|
||||
changes in 7.0 than in any previous release. Don't be concerned this is
|
||||
a dot-zero release. We do our best to put out only solid releases, and
|
||||
This release contains improvements in many areas, demonstrating
|
||||
the continued growth of <productname>PostgreSQL</productname>.
|
||||
There are more improvements and fixes in 7.0 than in any previous
|
||||
release. The developers have confidence that this is the best
|
||||
release yet; we do our best to put out only solid releases, and
|
||||
this one is no exception.
|
||||
</para>
|
||||
|
||||
|
@ -49,7 +51,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 mom
|
|||
<listitem>
|
||||
<para>
|
||||
Continuing on work started a year ago, the optimizer has been
|
||||
overhauled, allowing improved query execution and better performance
|
||||
improved, allowing better query plan selection and faster performance
|
||||
with less memory usage.
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -80,7 +82,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 mom
|
|||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
||||
<!--
|
||||
<varlistentry>
|
||||
<term>
|
||||
Upcoming Features
|
||||
|
@ -92,6 +94,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 mom
|
|||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
-->
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
|
@ -102,10 +105,75 @@ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 mom
|
|||
A dump/restore using <application>pg_dump</application>
|
||||
is required for those wishing to migrate data from any
|
||||
previous release of <productname>Postgres</productname>.
|
||||
For those upgrading from 6.5.*, you can use
|
||||
For those upgrading from 6.5.*, you may instead use
|
||||
<application>pg_upgrade</application> to upgrade to this
|
||||
release.
|
||||
release; however, a full dump/reload installation is always the
|
||||
most robust method for upgrades.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Interface and compatibility issues to consider for the new
|
||||
release include:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
The date/time types <type>datetime</type> and
|
||||
<type>timespan</type> have been superceded by the
|
||||
SQL92-defined types <type>timestamp</type> and
|
||||
<type>interval</type>. Although there has been some effort to
|
||||
ease the transition by allowing
|
||||
<productname>Postgres</productname> to recognize
|
||||
the deprecated type names and translate them to the new type
|
||||
names, this mechanism may not be completely transparent to
|
||||
your existing application.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<!--
|
||||
<listitem>
|
||||
<para>
|
||||
The security provisions for <firstterm>alternate locations</firstterm> have
|
||||
been strengthened by requiring the absolute path to be present
|
||||
in the environment variable <envar>PGxxx
|
||||
|
||||
Ack! This isn't yet in the code?? - thomas 2000-04-30
|
||||
</para>
|
||||
</listitem>
|
||||
-->
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
The optimizer has been substantially improved in the area of
|
||||
query cost estimation. In some cases, this will result in
|
||||
decreased query times as the optimizer makes a better choice
|
||||
for the preferred plan. However, in a small number of cases,
|
||||
usually involving pathological distributions of data, your
|
||||
query times may go up. If you are dealing with large amounts
|
||||
of data, you may want to check your queries to verify
|
||||
performance.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
The <acronym>JDBC</acronym> and <acronym>ODBC</acronym>
|
||||
interfaces have been upgraded and extended.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
The string function <function>CHAR_LENGTH</function> is now a
|
||||
native function. Previous versions translated this into a call
|
||||
to <function>LENGTH</function>, which could result in
|
||||
ambiguity with other types implementing
|
||||
<function>LENGTH</function> such as the geometric types.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
@ -114,7 +182,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/release.sgml,v 1.46 2000/05/02 17:06:10 mom
|
|||
<programlisting>
|
||||
Bug Fixes
|
||||
---------
|
||||
Prevent function calls with more than maximum number of arguments (Tom)
|
||||
Prevent function calls exceeding maximum number of arguments (Tom)
|
||||
Improve CASE construct (Tom)
|
||||
Fix SELECT coalesce(f1,0) FROM int4_tbl GROUP BY f1 (Tom)
|
||||
Fix SELECT sentence.words[0] FROM sentence GROUP BY sentence.words[0] (Tom)
|
||||
|
@ -125,15 +193,15 @@ Fix for SELECT a/2, a/2 FROM test_missing_target GROUP BY a/2 (Tom)
|
|||
Fix for subselects in INSERT ... SELECT (Tom)
|
||||
Prevent INSERT ... SELECT ... ORDER BY (Tom)
|
||||
Fixes for relations greater than 2GB, including vacuum
|
||||
Improve communication of system table changes to other running backends (Tom)
|
||||
Improve communication of user table modifications to other running backends (Tom)
|
||||
Improve propagating system table changes to other backends (Tom)
|
||||
Improve propagating user table changes to other backends (Tom)
|
||||
Fix handling of temp tables in complex situations (Bruce, Tom)
|
||||
Allow table locking when tables opened, improving concurrent reliability (Tom)
|
||||
Allow table locking at table open, improving concurrent reliability (Tom)
|
||||
Properly quote sequence names in pg_dump (Ross J. Reedstrom)
|
||||
Prevent DROP DATABASE while others accessing
|
||||
Prevent any rows from being returned by GROUP BY if no rows processed (Tom)
|
||||
Fix SELECT COUNT(1) FROM table WHERE ...' if no rows matching WHERE (Tom)
|
||||
Fix pg_upgrade so it works for MVCC(Tom)
|
||||
Fix pg_upgrade so it works for MVCC (Tom)
|
||||
Fix for SELECT ... WHERE x IN (SELECT ... HAVING SUM(x) > 1) (Tom)
|
||||
Fix for "f1 datetime DEFAULT 'now'" (Tom)
|
||||
Fix problems with CURRENT_DATE used in DEFAULT (Tom)
|
||||
|
@ -141,8 +209,8 @@ Allow comment-only lines, and ;;; lines too. (Tom)
|
|||
Improve recovery after failed disk writes, disk full (Hiroshi)
|
||||
Fix cases where table is mentioned in FROM but not joined (Tom)
|
||||
Allow HAVING clause without aggregate functions (Tom)
|
||||
Fix for "--" comment and no trailing newline, as seen in Perl
|
||||
Improve pg_dump failure error reports (Bruce)
|
||||
Fix for "--" comment and no trailing newline, as seen in perl interface
|
||||
Improve pg_dump failure error reports (Bruce)
|
||||
Allow sorts and hashes to exceed 2GB file sizes (Tom)
|
||||
Fix for pg_dump dumping of inherited rules (Tom)
|
||||
Fix for NULL handling comparisons (Tom)
|
||||
|
@ -197,8 +265,7 @@ Update jdbc protocol to 2.0 (<ulink url="mailto:jens@jens.de">Jens Glaser</ulink
|
|||
Add TRUNCATE command to quickly truncate relation (Mike Mascari)
|
||||
Fix to give super user and createdb user proper update catalog rights (Peter E)
|
||||
Allow ecpg bool variables to have NULL values (Christof)
|
||||
Issue ecpg error if NULL value is returned to variable with no NULL
|
||||
indicator (Christof)
|
||||
Issue ecpg error if NULL value for variable with no NULL indicator (Christof)
|
||||
Allow ^C to cancel COPY command (Massimo)
|
||||
Add SET FSYNC and SHOW PG_OPTIONS commands(Massimo)
|
||||
Function name overloading for dynamically-loaded C functions (Frankpitt)
|
||||
|
@ -214,7 +281,6 @@ Add FOREIGN KEY ... MATCH <unspecified> referential actions (Don Baccus)
|
|||
Allow WHERE restriction on ctid (physical heap location) (Hiroshi)
|
||||
Move pginterface from contrib to interface directory, rename to pgeasy (Bruce)
|
||||
Change pgeasy connectdb() parameter ordering (Bruce)
|
||||
Add DEC and SESSION_USER as reserved words (Thomas)
|
||||
Require SELECT DISTINCT target list to have all ORDER BY columns (Tom)
|
||||
Add Oracle's COMMENT ON command (<ulink url="mailto:mascarim@yahoo">Mike Mascari</ulink>)
|
||||
libpq's PQsetNoticeProcessor function now returns previous hook(Peter E)
|
||||
|
@ -227,8 +293,7 @@ Change backend-side COPY to write files with permissions 644 not 666 (Tom)
|
|||
Force permissions on PGDATA directory to be secure, even if it exists (Tom)
|
||||
Added psql LASTOID variable to return last inserted oid (Peter E)
|
||||
Allow concurrent vacuum and remove pg_vlock vacuum lock file (Tom)
|
||||
Add permissions check so only Postgres superuser or table owner can
|
||||
vacuum (Peter E)
|
||||
Add permissions check for vacuum (Peter E)
|
||||
New libpq functions to allow asynchronous connections: PQconnectStart(),
|
||||
PQconnectPoll(), PQresetStart(), PQresetPoll(), PQsetenvStart(),
|
||||
PQsetenvPoll(), PQsetenvAbort (Ewan Mellor)
|
||||
|
@ -236,8 +301,8 @@ New libpq PQsetenv() function (Ewan Mellor)
|
|||
create/alter user extension (Peter E)
|
||||
New postmaster.pid and postmaster.opts under $PGDATA (Tatsuo)
|
||||
New scripts for create/drop user/db (Peter E)
|
||||
Major psql overhaul(Peter E)
|
||||
Add const to libpq interface(Peter E)
|
||||
Major psql overhaul (Peter E)
|
||||
Add const to libpq interface (Peter E)
|
||||
New libpq function PQoidValue (Peter E)
|
||||
Show specific non-aggregate causing problem with GROUP BY (Tom)
|
||||
Make changes to pg_shadow recreate pg_pwd file (Peter E)
|
||||
|
@ -281,12 +346,11 @@ Allow SELECT .. FOR UPDATE in PL/pgSQL (Hiroshi)
|
|||
Enable backward sequential scan even after reaching EOF (Hiroshi)
|
||||
Add btree indexing of boolean values, >= and <= (Don Baccus)
|
||||
Print current line number when COPY FROM fails (Massimo)
|
||||
Recognize special case of POSIX time zone: "GMT+8" and "GMT-8" (Thomas)
|
||||
Add DEC as synonym for "DECIMAL" (Thomas)
|
||||
Recognize POSIX time zone e.g. "PST+8" and "GMT-8" (Thomas)
|
||||
Add DEC as synonym for DECIMAL (Thomas)
|
||||
Add SESSION_USER as SQL92 keyword, same as CURRENT_USER (Thomas)
|
||||
Implement column aliases (aka correlation names) and join syntax (Thomas)
|
||||
Allow queries like SELECT a FROM t1 tx (a) (Thomas)
|
||||
Allow queries like SELECT * FROM t1 NATURAL JOIN t2 (Thomas)
|
||||
Implement SQL92 column aliases (aka correlation names) (Thomas)
|
||||
Implement SQL92 join syntax (Thomas)
|
||||
Make INTERVAL reserved word allowed as a column identifier (Thomas)
|
||||
Implement REINDEX command (Hiroshi)
|
||||
Accept ALL in aggregate function SUM(ALL col) (Tom)
|
||||
|
@ -322,9 +386,8 @@ Allow bare column names to be subscripted as arrays (Tom)
|
|||
Improve type casting of int and float constants (Tom)
|
||||
Cleanups for int8 inputs, range checking, and type conversion (Tom)
|
||||
Fix for SELECT timespan('21:11:26'::time) (Tom)
|
||||
Fix for netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0
|
||||
(Oleg Sharoiko)
|
||||
Add btree index on NUMERIC(Jan)
|
||||
netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0 (Oleg Sharoiko)
|
||||
Add btree index on NUMERIC (Jan)
|
||||
Perl fix for large objects containing NUL characters (Douglas Thomson)
|
||||
ODBC fix for for large objects (free)
|
||||
Fix indexing of cidr data type
|
||||
|
@ -338,26 +401,25 @@ Make char_length()/octet_length including trailing blanks (Tom)
|
|||
Made abstime/reltime use int4 instead of time_t (Peter E)
|
||||
New lztext data type for compressed text fields
|
||||
Revise code to handle coercion of int and float constants (Tom)
|
||||
New C-routines to implement a BIT and BIT VARYING type in /contrib
|
||||
(Adriaan Joubert)
|
||||
Start at new code to implement a BIT and BIT VARYING type (Adriaan Joubert)
|
||||
NUMERIC now accepts scientific notation (Tom)
|
||||
NUMERIC to int4 rounds (Tom)
|
||||
Convert float4/8 to NUMERIC properly (Tom)
|
||||
Allow type conversion with NUMERIC (Thomas)
|
||||
Make ISO date style (2000-02-16 09:33) the default (Thomas)
|
||||
Add NATIONAL CHAR [ VARYING ]
|
||||
Add NATIONAL CHAR [ VARYING ] (Thomas)
|
||||
Allow NUMERIC round and trunc to accept negative scales (Tom)
|
||||
New TIME WITH TIME ZONE type (Thomas)
|
||||
Add MAX()/MIN() on time type (Thomas)
|
||||
Add abs(), mod(), fac() for int8 (Thomas)
|
||||
Add round(), sqrt(), cbrt(), pow()
|
||||
Rename NUMERIC power() to pow()
|
||||
Improved TRANSLATE() function
|
||||
Rename functions to round(), sqrt(), cbrt(), pow() for float8 (Thomas)
|
||||
Add transcendental math functions (e.g. sin(), acos()) for float8 (Thomas)
|
||||
Add exp() and ln() for NUMERIC type
|
||||
Rename NUMERIC power() to pow() (Thomas)
|
||||
Improved TRANSLATE() function (Edwin Ramirez, Tom)
|
||||
Allow X=-Y operators (Tom)
|
||||
Add exp() and ln() as NUMERIC types
|
||||
Allow SELECT float8(COUNT(*)) / (SELECT COUNT(*) FROM int4_tbl) FROM int4_tbl
|
||||
GROUP BY f1; (Tom)
|
||||
Allow LOCALE to use indexes in regular expression searches(Tom)
|
||||
Allow SELECT float8(COUNT(*))/(SELECT COUNT(*) FROM t) FROM t GROUP BY f1; (Tom)
|
||||
Allow LOCALE to use indexes in regular expression searches (Tom)
|
||||
Allow creation of functional indexes to use default types
|
||||
|
||||
Performance
|
||||
|
@ -378,13 +440,12 @@ Prefer index scans in cases where ORDER BY/GROUP BY is required (Tom)
|
|||
Allocate large memory requests in fix-sized chunks for performance (Tom)
|
||||
Fix vacuum's performance by reducing memory allocation requests (Tom)
|
||||
Implement constant-expression simplification (Bernard Frankpitt, Tom)
|
||||
Allow more than first column to be used to determine start of index scan
|
||||
(Hiroshi)
|
||||
Use secondary columns to be used to determine start of index scan (Hiroshi)
|
||||
Prevent quadruple use of disk space when doing internal sorting (Tom)
|
||||
Faster sorting by calling fewer functions (Tom)
|
||||
Create system indexes to match all system caches (Bruce, Hiroshi)
|
||||
Make system caches use system indexes(Bruce)
|
||||
Make all system indexes unique(Bruce)
|
||||
Make system caches use system indexes (Bruce)
|
||||
Make all system indexes unique (Bruce)
|
||||
Improve pg_statistics management for VACUUM speed improvement (Tom)
|
||||
Flush backend cache less frequently (Tom, Hiroshi)
|
||||
COPY now reuses previous memory allocation, improving performance (Tom)
|
||||
|
@ -398,17 +459,17 @@ New SET variable to control optimizer costs (Tom)
|
|||
Optimizer queries based on LIMIT, OFFSET, and EXISTS qualifications (Tom)
|
||||
Reduce optimizer internal housekeeping of join paths for speedup (Tom)
|
||||
Major subquery speedup (Tom)
|
||||
Fewer fsync writes when fsync is not disabled(Tom)
|
||||
Improved LIKE optimizer estimates(Tom)
|
||||
Prevent fsync in SELECT-only queries(Vadim)
|
||||
Make index creation use psort code, because it is now faster(Tom)
|
||||
Fewer fsync writes when fsync is not disabled (Tom)
|
||||
Improved LIKE optimizer estimates (Tom)
|
||||
Prevent fsync in SELECT-only queries (Vadim)
|
||||
Make index creation use psort code, because it is now faster (Tom)
|
||||
Allow creation of sort temp tables > 1 Gig
|
||||
|
||||
Source Tree Changes
|
||||
-------------------
|
||||
Fix for linux PPC compile
|
||||
New generic expression-tree-walker subroutine (Tom)
|
||||
Change form() to varargform() to prevent portability problems.
|
||||
Change form() to varargform() to prevent portability problems
|
||||
Improved range checking for large integers on Alphas
|
||||
Clean up #include in /include directory (Bruce)
|
||||
Add scripts for checking includes (Bruce)
|
||||
|
@ -418,9 +479,9 @@ Enable WIN32 compilation of libpq
|
|||
Alpha spinlock fix from <ulink url="mailto:gatgul@voicenet.com">Uncle George</ulink>
|
||||
Overhaul of optimizer data structures (Tom)
|
||||
Fix to cygipc library (Yutaka Tanida)
|
||||
Allow pgsql to work on newer Cygwin snapshots(Dan)
|
||||
Allow pgsql to work on newer Cygwin snapshots (Dan)
|
||||
New catalog version number (Tom)
|
||||
Add Linux ARM.
|
||||
Add Linux ARM
|
||||
Rename heap_replace to heap_update
|
||||
Update for QNX (Dr. Andreas Kardos)
|
||||
New platform-specific regression handling (Tom)
|
||||
|
@ -1636,7 +1697,7 @@ Support for client-side environment variables to specify time zone and date styl
|
|||
<para>
|
||||
Socket interface for client/server connection. This is the default now
|
||||
so you may need to start <application>postmaster</application> with the
|
||||
<quote>-i</quote> flag.
|
||||
<option>-i</option> flag.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
|
@ -1646,11 +1707,12 @@ Better password authorization mechanisms. Default table permissions have changed
|
|||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
Old-style <quote>time travel</quote> has been removed. Performance has been improved.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Old-style <firstterm>time travel</firstterm>
|
||||
has been removed. Performance has been improved.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
|
|
@ -854,18 +854,18 @@
|
|||
<Para>
|
||||
There was a long time where the <ProductName>Postgres</ProductName>
|
||||
rule system was considered broken. The use of rules was not
|
||||
recommended and the only part working where view rules. And also
|
||||
these view rules made problems because the rule system wasn't able
|
||||
to apply them properly on other statements than a SELECT (for
|
||||
recommended and the only part working was view rules. And also
|
||||
these view rules gave problems because the rule system wasn't able
|
||||
to apply them properly on statements other than a SELECT (for
|
||||
example an UPDATE
|
||||
that used data from a view didn't work).
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
During that time, development moved on and many features where
|
||||
During that time, development moved on and many features were
|
||||
added to the parser and optimizer. The rule system got more and more
|
||||
out of sync with their capabilities and it became harder and harder
|
||||
to start fixing it. Thus, noone did.
|
||||
to start fixing it. Thus, no one did.
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
|
@ -2088,7 +2088,7 @@ Merge Join
|
|||
</Para>
|
||||
|
||||
<Para>
|
||||
Another situation are cases on UPDATE where it depends on the
|
||||
Another situation is cases on UPDATE where it depends on the
|
||||
change of an attribute if an action should be performed or
|
||||
not. In <ProductName>Postgres</ProductName> version 6.4, the
|
||||
attribute specification for rule events is disabled (it will have
|
||||
|
@ -2096,7 +2096,7 @@ Merge Join
|
|||
- stay tuned). So for now the only way to
|
||||
create a rule as in the shoelace_log example is to do it with
|
||||
a rule qualification. That results in an extra query that is
|
||||
performed allways, even if the attribute of interest cannot
|
||||
performed always, even if the attribute of interest cannot
|
||||
change at all because it does not appear in the targetlist
|
||||
of the initial query. When this is enabled again, it will be
|
||||
one more advantage of rules over triggers. Optimization of
|
||||
|
@ -2108,7 +2108,7 @@ Merge Join
|
|||
decision. The rule system will know it by looking up the
|
||||
targetlist and will suppress the additional query completely
|
||||
if the attribute isn't touched. So the rule, qualified or not,
|
||||
will only do it's scan's if there ever could be something to do.
|
||||
will only do its scans if there ever could be something to do.
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
|
@ -2121,3 +2121,20 @@ Merge Join
|
|||
</Sect1>
|
||||
|
||||
</Chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.9 2000/04/23 00:25:06 tgl Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.10 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<Chapter Id="runtime">
|
||||
|
@ -16,7 +16,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.9 2000/04/23 00:25:06 tgl
|
|||
<para>
|
||||
All <Productname>Postgres</Productname> commands that are executed
|
||||
directly from a Unix shell are
|
||||
found in the directory <quote>.../bin</quote>. Including this directory in
|
||||
found in the directory <filename>.../bin</filename>. Including this directory in
|
||||
your search path will make executing the commands easier.
|
||||
</para>
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ FloatExceptionHandler
|
|||
|
||||
<note>
|
||||
<para>
|
||||
<quote>kill(*,signal)</quote> means sending a signal to all backends.
|
||||
"<literal>kill(*,signal)</literal>" means sending a signal to all backends.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
|
@ -247,3 +247,20 @@ cat old_pg_options > $DATA_DIR/pg_options
|
|||
</programlisting>
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -157,7 +157,10 @@ Return status
|
|||
<REFSECT1 ID="R1-SPI-SPICONNECT-2">
|
||||
<TITLE>Usage
|
||||
</TITLE>
|
||||
<PARA>XXX thomas 1997-12-24
|
||||
<PARA>
|
||||
<!--
|
||||
XXX thomas 1997-12-24
|
||||
-->
|
||||
</PARA>
|
||||
</REFSECT1>
|
||||
<REFSECT1 ID="R1-SPI-SPICONNECT-3">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.8 2000/04/07 13:30:58 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.9 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="sql">
|
||||
|
@ -24,7 +24,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.8 2000/04/07 13:30:58 thomas E
|
|||
<para>
|
||||
<acronym>SQL</acronym> has become the most popular relational query
|
||||
language.
|
||||
The name <quote><acronym>SQL</acronym></quote> is an abbreviation for
|
||||
The name "<acronym>SQL</acronym>" is an abbreviation for
|
||||
<firstterm>Structured Query Language</firstterm>.
|
||||
In 1974 Donald Chamberlin and others defined the
|
||||
language SEQUEL (<firstterm>Structured English Query
|
||||
|
@ -759,8 +759,8 @@ t<subscript>r</subscript>(A,B)=t∧t<subscript>r</subscript>(C,D)=t<subscript>
|
|||
can be formulated using relational algebra can also be formulated
|
||||
using the relational calculus and vice versa.
|
||||
This was first proved by E. F. Codd in
|
||||
1972. This proof is based on an algorithm (<quote>Codd's reduction
|
||||
algorithm</quote>) by which an arbitrary expression of the relational
|
||||
1972. This proof is based on an algorithm ("Codd's reduction
|
||||
algorithm") by which an arbitrary expression of the relational
|
||||
calculus can be reduced to a semantically equivalent expression of
|
||||
relational algebra. For a more detailed discussion on that refer to
|
||||
<xref linkend="DATE94" endterm="DATE94">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.10 2000/04/07 13:30:58 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.11 2000/05/02 20:01:52 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="start">
|
||||
|
@ -19,7 +19,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.10 2000/04/07 13:30:58 thoma
|
|||
the database directories and started the
|
||||
<application>postmaster</application>
|
||||
process. This person does not have to be the Unix
|
||||
superuser (<quote>root</quote>)
|
||||
superuser ("root")
|
||||
or the computer system administrator; a person can install and use
|
||||
<productname>Postgres</productname> without any special accounts or
|
||||
privileges.
|
||||
|
@ -34,9 +34,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/start.sgml,v 1.10 2000/04/07 13:30:58 thoma
|
|||
|
||||
<para>
|
||||
Throughout this manual, any examples that begin with
|
||||
the character <quote>%</quote> are commands that should be typed
|
||||
the character "<literal>%</literal>" are commands that should be typed
|
||||
at the Unix shell prompt. Examples that begin with the
|
||||
character <quote>*</quote> are commands in the Postgres query
|
||||
character "<literal>*</literal>" are commands in the Postgres query
|
||||
language, Postgres <acronym>SQL</acronym>.
|
||||
</para>
|
||||
|
||||
|
@ -346,7 +346,7 @@ mydb=>
|
|||
workspace maintained by the terminal monitor.
|
||||
The <application>psql</application> program responds to escape
|
||||
codes that begin
|
||||
with the backslash character, <quote>\</quote> For example, you
|
||||
with the backslash character, "<literal>\</literal>" For example, you
|
||||
can get help on the syntax of various
|
||||
<productname>Postgres</productname> <acronym>SQL</acronym>
|
||||
commands by typing:
|
||||
|
@ -364,7 +364,7 @@ mydb=> \g
|
|||
</programlisting>
|
||||
|
||||
This tells the server to process the query. If you
|
||||
terminate your query with a semicolon, the <quote>\g</quote> is not
|
||||
terminate your query with a semicolon, the "<literal>\g</literal>" is not
|
||||
necessary.
|
||||
<application>psql</application> will automatically process
|
||||
semicolon terminated queries.
|
||||
|
@ -386,9 +386,9 @@ mydb=> \q
|
|||
White space (i.e., spaces, tabs and newlines) may be
|
||||
used freely in <acronym>SQL</acronym> queries. Single-line
|
||||
comments are denoted by
|
||||
<quote>--</quote>. Everything after the dashes up to the end of the
|
||||
"<literal>--</literal>". Everything after the dashes up to the end of the
|
||||
line is ignored. Multiple-line comments, and comments within a line,
|
||||
are denoted by <quote>/* ... */</quote>
|
||||
are denoted by "<literal>/* ... */</literal>".
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.19 2000/04/08 23:12:00 momjian Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.20 2000/05/02 20:01:53 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="syntax">
|
||||
|
@ -65,7 +65,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.19 2000/04/08 23:12:00 momj
|
|||
Any string can be specified as an identifier if surrounded by
|
||||
double quotes (<quote>like this!</quote>). Some care is required since
|
||||
such an identifier will be case sensitive
|
||||
and will retain embedded whitespace other special characters.
|
||||
and will retain embedded whitespace and most other special characters.
|
||||
</para>
|
||||
</tip>
|
||||
|
||||
|
@ -84,6 +84,7 @@ EXPLAIN EXTEND
|
|||
LISTEN LOAD LOCK
|
||||
MOVE
|
||||
NEW NONE NOTIFY
|
||||
OFFSET
|
||||
RESET
|
||||
SETOF SHOW
|
||||
UNLISTEN UNTIL
|
||||
|
@ -98,19 +99,27 @@ VACUUM VERBOSE
|
|||
are allowed to be present as column labels, but not as identifiers:
|
||||
|
||||
<programlisting>
|
||||
CASE COALESCE CROSS CURRENT CURRENT_USER CURRENT_SESSION
|
||||
DEC DECIMAL
|
||||
ELSE END
|
||||
FALSE FOREIGN
|
||||
ALL ANY ASC BETWEEN BIT BOTH
|
||||
CASE CAST CHAR CHARACTER CHECK COALESCE COLLATE COLUMN
|
||||
CONSTRAINT CROSS CURRENT CURRENT_DATE CURRENT_TIME
|
||||
CURRENT_TIMESTAMP CURRENT_USER
|
||||
DEC DECIMAL DEFAULT DESC DISTINCT
|
||||
ELSE END EXCEPT EXISTS EXTRACT
|
||||
FALSE FLOAT FOR FOREIGN FROM FULL
|
||||
GLOBAL GROUP
|
||||
LOCAL
|
||||
NULLIF NUMERIC
|
||||
ORDER
|
||||
POSITION PRECISION
|
||||
SESSION_USER
|
||||
TABLE THEN TRANSACTION TRUE
|
||||
USER
|
||||
WHEN
|
||||
HAVING
|
||||
IN INNER INTERSECT INTO IS
|
||||
JOIN
|
||||
LEADING LEFT LIKE LOCAL
|
||||
NATURAL NCHAR NOT NULL NULLIF NUMERIC
|
||||
ON OR ORDER OUTER OVERLAPS
|
||||
POSITION PRECISION PRIMARY PUBLIC
|
||||
REFERENCES RIGHT
|
||||
SELECT SESSION_USER SOME SUBSTRING
|
||||
TABLE THEN TO TRANSACTION TRIM TRUE
|
||||
UNION UNIQUE USER
|
||||
VARCHAR
|
||||
WHEN WHERE
|
||||
</programlisting>
|
||||
|
||||
The following are <productname>Postgres</productname>
|
||||
|
@ -118,12 +127,9 @@ WHEN
|
|||
or <acronym>SQL3</acronym> reserved words:
|
||||
|
||||
<programlisting>
|
||||
ADD ALL ALTER AND ANY AS ASC
|
||||
BEGIN BETWEEN BOTH BY
|
||||
CASCADE CAST CHAR CHARACTER CHECK CLOSE
|
||||
COLLATE COLUMN COMMIT CONSTRAINT CREATE
|
||||
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
|
||||
CURSOR
|
||||
ADD ALTER AND AS
|
||||
BEGIN BY
|
||||
CASCADE CLOSE COMMIT CREATE CURSOR
|
||||
DECLARE DEFAULT DELETE DESC DISTINCT DROP
|
||||
EXECUTE EXISTS EXTRACT
|
||||
FETCH FLOAT FOR FROM FULL
|
||||
|
@ -148,10 +154,10 @@ WHERE WITH WORK
|
|||
The following are <acronym>SQL92</acronym> reserved key words which
|
||||
are not <productname>Postgres</productname> reserved key words, but which
|
||||
if used as function names are always translated into the function
|
||||
<function>length</function>:
|
||||
<function>CHAR_LENGTH</function>:
|
||||
|
||||
<programlisting>
|
||||
CHAR_LENGTH CHARACTER_LENGTH
|
||||
CHARACTER_LENGTH
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -166,12 +172,28 @@ BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
|
|||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following are not keywords of any kind, but when used in the
|
||||
context of a type name are translated into a native
|
||||
<productname>Postgres</productname> type, and when used in the
|
||||
context of a function name are translated into a native function:
|
||||
|
||||
<programlisting>
|
||||
DATETIME TIMESPAN
|
||||
</programlisting>
|
||||
|
||||
(translated to <type>TIMESTAMP</type> and <type>INTERVAL</type>,
|
||||
respectively). This feature is intended to help with
|
||||
transitioning to v7.0, and will be removed in the next full
|
||||
release (likely v7.1).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following are either <acronym>SQL92</acronym>
|
||||
or <acronym>SQL3</acronym> reserved key words
|
||||
which are not key words in <productname>Postgres</productname>.
|
||||
These have no proscribed usage in <productname>Postgres</productname>
|
||||
at the time of writing (v6.5) but may become reserved key words in the
|
||||
at the time of writing (v7.0) but may become reserved key words in the
|
||||
future:
|
||||
|
||||
<note>
|
||||
|
@ -185,9 +207,10 @@ BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
|
|||
|
||||
<programlisting>
|
||||
ALLOCATE ARE ASSERTION AT AUTHORIZATION AVG
|
||||
BIT BIT_LENGTH
|
||||
CASCADED CATALOG COLLATION CONNECT CONNECTION
|
||||
CONTINUE CONVERT CORRESPONDING COUNT
|
||||
BIT_LENGTH
|
||||
CASCADED CATALOG CHAR_LENGTH CHARACTER_LENGTH COLLATION
|
||||
CONNECT CONNECTION CONTINUE CONVERT CORRESPONDING COUNT
|
||||
CURRENT_SESSION
|
||||
DATE DEALLOCATE DEC DESCRIBE DESCRIPTOR
|
||||
DIAGNOSTICS DISCONNECT DOMAIN
|
||||
ESCAPE EXCEPT EXCEPTION EXEC EXTERNAL
|
||||
|
@ -231,20 +254,21 @@ WHENEVER WRITE
|
|||
<programlisting>
|
||||
ACCESS AFTER AGGREGATE
|
||||
BACKWARD BEFORE
|
||||
CACHE CREATEDB CREATEUSER CYCLE
|
||||
CACHE COMMENT CREATEDB CREATEUSER CYCLE
|
||||
DATABASE DELIMITERS
|
||||
EACH ENCODING EXCLUSIVE
|
||||
FORWARD FUNCTION
|
||||
FORCE FORWARD FUNCTION
|
||||
HANDLER
|
||||
INCREMENT INDEX INHERITS INSENSITIVE INSTEAD ISNULL
|
||||
LANCOMPILER LOCATION
|
||||
MAXVALUE MINVALUE MODE
|
||||
NOCREATEDB NOCREATEUSER NOTHING NOTNULL
|
||||
NOCREATEDB NOCREATEUSER NOTHING NOTIFY NOTNULL
|
||||
OIDS OPERATOR
|
||||
PASSWORD PROCEDURAL
|
||||
RECIPE RENAME RETURNS ROW RULE
|
||||
RECIPE REINDEX RENAME RETURNS ROW RULE
|
||||
SEQUENCE SERIAL SHARE START STATEMENT STDIN STDOUT
|
||||
TRUSTED
|
||||
TEMP TRUSTED
|
||||
UNLISTEN UNTIL
|
||||
VALID VERSION
|
||||
</programlisting>
|
||||
</para>
|
||||
|
|
|
@ -1,187 +1,332 @@
|
|||
<Chapter Id="triggers">
|
||||
<Title>Triggers</Title>
|
||||
<chapter id="triggers">
|
||||
<title>Triggers</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName> has various client interfaces
|
||||
such as Perl, Tcl, Python and C, as well as two
|
||||
<FirstTerm>Procedural Languages</FirstTerm>
|
||||
(PL). It is also possible
|
||||
to call C functions as trigger actions. Note that STATEMENT-level trigger
|
||||
events are not supported in the current version. You can currently specify
|
||||
BEFORE or AFTER on INSERT, DELETE or UPDATE of a tuple as a trigger event.
|
||||
</Para>
|
||||
<para>
|
||||
<productname>Postgres</productname> has various client interfaces
|
||||
such as Perl, Tcl, Python and C, as well as three
|
||||
<firstterm>Procedural Languages</firstterm>
|
||||
(PL). It is also possible
|
||||
to call C functions as trigger actions. Note that STATEMENT-level trigger
|
||||
events are not supported in the current version. You can currently specify
|
||||
BEFORE or AFTER on INSERT, DELETE or UPDATE of a tuple as a trigger event.
|
||||
</para>
|
||||
|
||||
<Sect1>
|
||||
<Title>Trigger Creation</Title>
|
||||
<sect1>
|
||||
<title>Trigger Creation</title>
|
||||
|
||||
<Para>
|
||||
If a trigger event occurs, the trigger manager (called by the Executor)
|
||||
initializes the global structure TriggerData *CurrentTriggerData (described
|
||||
below) and calls the trigger function to handle the event.
|
||||
</Para>
|
||||
<para>
|
||||
If a trigger event occurs, the trigger manager (called by the Executor)
|
||||
initializes the global structure TriggerData *CurrentTriggerData (described
|
||||
below) and calls the trigger function to handle the event.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
The trigger function must be created before the trigger is created as a
|
||||
function taking no arguments and returns opaque.
|
||||
</Para>
|
||||
<para>
|
||||
The trigger function must be created before the trigger is created as a
|
||||
function taking no arguments and returns opaque.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
The syntax for creating triggers is as follows:
|
||||
<para>
|
||||
The syntax for creating triggers is as follows:
|
||||
|
||||
<ProgramListing>
|
||||
CREATE TRIGGER <trigger name> <BEFORE|AFTER> <INSERT|DELETE|UPDATE>
|
||||
ON <relation name> FOR EACH <ROW|STATEMENT>
|
||||
EXECUTE PROCEDURE <procedure name> (<function args>);
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
<programlisting>
|
||||
CREATE TRIGGER <replaceable>trigger</replaceable> [ BEFORE | AFTER ] [ INSERT | DELETE | UPDATE [ OR ... ] ]
|
||||
ON <replaceable>relation</replaceable> FOR EACH [ ROW | STATEMENT ]
|
||||
EXECUTE PROCEDURE <replaceable>procedure</replaceable>
|
||||
(<replaceable>args</replaceable>);
|
||||
</programlisting>
|
||||
|
||||
<Para>
|
||||
The name of the trigger is used if you ever have to delete the trigger.
|
||||
It is used as an argument to the DROP TRIGGER command.
|
||||
</Para>
|
||||
where the arguments are:
|
||||
|
||||
<Para>
|
||||
The next word determines whether the function is called before or after
|
||||
the event.
|
||||
</Para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<replaceable>trigger</replaceable>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The name of the trigger is
|
||||
used if you ever have to delete the trigger.
|
||||
It is used as an argument to the <command>DROP TRIGGER</command> command.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<Para>
|
||||
The next element of the command determines on what event(s) will trigger
|
||||
the function. Multiple events can be specified separated by OR.
|
||||
</Para>
|
||||
<varlistentry>
|
||||
<term>BEFORE</term>
|
||||
<term>AFTER</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Determines whether the function is called before or after
|
||||
the event.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<Para>
|
||||
The relation name determines which table the event applies to.
|
||||
</Para>
|
||||
<varlistentry>
|
||||
<term>INSERT</term>
|
||||
<term>DELETE</term>
|
||||
<term>UPDATE</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The next element of the command determines on what event(s) will trigger
|
||||
the function. Multiple events can be specified separated by OR.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<Para>
|
||||
The FOR EACH statement determines whether the trigger is fired for each
|
||||
affected row or before (or after) the entire statement has completed.
|
||||
</Para>
|
||||
<varlistentry>
|
||||
<term><replaceable>relation</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The relation name determines which table the event applies to.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<Para>
|
||||
The procedure name is the C function called.
|
||||
</Para>
|
||||
<varlistentry>
|
||||
<term>ROW</term>
|
||||
<term>STATEMENT</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The FOR EACH clause determines whether the trigger is fired for each
|
||||
affected row or before (or after) the entire statement has completed.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<Para>
|
||||
The args are passed to the function in the CurrentTriggerData structure.
|
||||
The purpose of passing arguments to the function is to allow different
|
||||
triggers with similar requirements to call the same function.
|
||||
</Para>
|
||||
<varlistentry>
|
||||
<term><replaceable>procedure</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The procedure name is the C function called.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<Para>
|
||||
Also, function may be used for triggering different relations (these
|
||||
functions are named as "general trigger functions").
|
||||
</Para>
|
||||
<varlistentry>
|
||||
<term><replaceable>args</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
The arguments passed to the function in the CurrentTriggerData structure.
|
||||
The purpose of passing arguments to the function is to allow different
|
||||
triggers with similar requirements to call the same function.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
As example of using both features above, there could be a general
|
||||
function that takes as its arguments two field names and puts the current
|
||||
user in one and the current timestamp in the other. This allows triggers to
|
||||
be written on INSERT events to automatically track creation of records in a
|
||||
transaction table for example. It could also be used as a "last updated"
|
||||
function if used in an UPDATE event.
|
||||
</Para>
|
||||
<para>
|
||||
Also, <replaceable>procedure</replaceable>
|
||||
may be used for triggering different relations (these
|
||||
functions are named as "general trigger functions").
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
Trigger functions return HeapTuple to the calling Executor. This
|
||||
is ignored for triggers fired after an INSERT, DELETE or UPDATE operation
|
||||
but it allows BEFORE triggers to:
|
||||
<para>
|
||||
As example of using both features above, there could be a general
|
||||
function that takes as its arguments two field names and puts the current
|
||||
user in one and the current timestamp in the other. This allows triggers to
|
||||
be written on INSERT events to automatically track creation of records in a
|
||||
transaction table for example. It could also be used as a "last updated"
|
||||
function if used in an UPDATE event.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
- return NULL to skip the operation for the current tuple (and so the
|
||||
tuple will not be inserted/updated/deleted);
|
||||
- return a pointer to another tuple (INSERT and UPDATE only) which will
|
||||
be inserted (as the new version of the updated tuple if UPDATE) instead
|
||||
of original tuple.
|
||||
</Para>
|
||||
<para>
|
||||
Trigger functions return HeapTuple to the calling Executor. This
|
||||
is ignored for triggers fired after an INSERT, DELETE or UPDATE operation
|
||||
but it allows BEFORE triggers to:
|
||||
|
||||
<Para>
|
||||
Note, that there is no initialization performed by the CREATE TRIGGER
|
||||
handler. This will be changed in the future. Also, if more than one trigger
|
||||
is defined for the same event on the same relation, the order of trigger
|
||||
firing is unpredictable. This may be changed in the future.
|
||||
</Para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Return NULL to skip the operation for the current tuple (and so the
|
||||
tuple will not be inserted/updated/deleted).
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<Para>
|
||||
If a trigger function executes SQL-queries (using SPI) then these queries
|
||||
may fire triggers again. This is known as cascading triggers. There is no
|
||||
explicit limitation on the number of cascade levels.
|
||||
</Para>
|
||||
<listitem>
|
||||
<para>
|
||||
Return a pointer to another tuple (INSERT and UPDATE only) which will
|
||||
be inserted (as the new version of the updated tuple if UPDATE) instead
|
||||
of original tuple.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
If a trigger is fired by INSERT and inserts a new tuple in the same
|
||||
relation then this trigger will be fired again. Currently, there is nothing
|
||||
provided for synchronization (etc) of these cases but this may change. At
|
||||
the moment, there is function funny_dup17() in the regress tests which uses
|
||||
some techniques to stop recursion (cascading) on itself...
|
||||
</Para>
|
||||
<para>
|
||||
Note that there is no initialization performed by the CREATE TRIGGER
|
||||
handler. This will be changed in the future. Also, if more than one trigger
|
||||
is defined for the same event on the same relation, the order of trigger
|
||||
firing is unpredictable. This may be changed in the future.
|
||||
</para>
|
||||
|
||||
</Sect1>
|
||||
<para>
|
||||
If a trigger function executes SQL-queries (using SPI) then these queries
|
||||
may fire triggers again. This is known as cascading triggers. There is no
|
||||
explicit limitation on the number of cascade levels.
|
||||
</para>
|
||||
|
||||
<Sect1>
|
||||
<Title>Interaction with the Trigger Manager</Title>
|
||||
<para>
|
||||
If a trigger is fired by INSERT and inserts a new tuple in the same
|
||||
relation then this trigger will be fired again. Currently, there is nothing
|
||||
provided for synchronization (etc) of these cases but this may change. At
|
||||
the moment, there is function funny_dup17() in the regress tests which uses
|
||||
some techniques to stop recursion (cascading) on itself...
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<Para>
|
||||
As mentioned above, when function is called by the trigger manager,
|
||||
structure TriggerData *CurrentTriggerData is NOT NULL and initialized. So
|
||||
it is better to check CurrentTriggerData against being NULL at the start
|
||||
and set it to NULL just after fetching the information to prevent calls to
|
||||
a trigger function not from the trigger manager.
|
||||
</Para>
|
||||
<sect1>
|
||||
<title>Interaction with the Trigger Manager</title>
|
||||
|
||||
<Para>
|
||||
struct TriggerData is defined in src/include/commands/trigger.h:
|
||||
<para>
|
||||
As mentioned above, when function is called by the trigger manager,
|
||||
structure TriggerData *CurrentTriggerData is NOT NULL and initialized. So
|
||||
it is better to check CurrentTriggerData against being NULL at the start
|
||||
and set it to NULL just after fetching the information to prevent calls to
|
||||
a trigger function not from the trigger manager.
|
||||
</para>
|
||||
|
||||
<ProgramListing>
|
||||
<para>
|
||||
struct TriggerData is defined in src/include/commands/trigger.h:
|
||||
|
||||
<programlisting>
|
||||
typedef struct TriggerData
|
||||
{
|
||||
TriggerEvent tg_event;
|
||||
Relation tg_relation;
|
||||
HeapTuple tg_trigtuple;
|
||||
HeapTuple tg_newtuple;
|
||||
Trigger *tg_trigger;
|
||||
TriggerEvent tg_event;
|
||||
Relation tg_relation;
|
||||
HeapTuple tg_trigtuple;
|
||||
HeapTuple tg_newtuple;
|
||||
Trigger *tg_trigger;
|
||||
} TriggerData;
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
|
||||
<ProgramListing>
|
||||
tg_event
|
||||
describes event for which the function is called. You may use the
|
||||
following macros to examine tg_event:
|
||||
where the members are defined as follows:
|
||||
|
||||
TRIGGER_FIRED_BEFORE(event) returns TRUE if trigger fired BEFORE;
|
||||
TRIGGER_FIRED_AFTER(event) returns TRUE if trigger fired AFTER;
|
||||
TRIGGER_FIRED_FOR_ROW(event) returns TRUE if trigger fired for
|
||||
ROW-level event;
|
||||
TRIGGER_FIRED_FOR_STATEMENT(event) returns TRUE if trigger fired for
|
||||
STATEMENT-level event;
|
||||
TRIGGER_FIRED_BY_INSERT(event) returns TRUE if trigger fired by INSERT;
|
||||
TRIGGER_FIRED_BY_DELETE(event) returns TRUE if trigger fired by DELETE;
|
||||
TRIGGER_FIRED_BY_UPDATE(event) returns TRUE if trigger fired by UPDATE.
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>tg_event</term>
|
||||
<listitem>
|
||||
<para>
|
||||
describes the event for which the function is called. You may use the
|
||||
following macros to examine <literal>tg_event</literal>:
|
||||
|
||||
tg_relation
|
||||
is pointer to structure describing the triggered relation. Look at
|
||||
src/include/utils/rel.h for details about this structure. The most
|
||||
interest things are tg_relation->rd_att (descriptor of the relation
|
||||
tuples) and tg_relation->rd_rel->relname (relation's name. This is not
|
||||
char*, but NameData. Use SPI_getrelname(tg_relation) to get char* if
|
||||
you need a copy of name).
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_BEFORE(tg_event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
returns TRUE if trigger fired BEFORE.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
tg_trigtuple
|
||||
is a pointer to the tuple for which the trigger is fired. This is the tuple
|
||||
being inserted (if INSERT), deleted (if DELETE) or updated (if UPDATE).
|
||||
If INSERT/DELETE then this is what you are to return to Executor if
|
||||
you don't want to replace tuple with another one (INSERT) or skip the
|
||||
operation.
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_AFTER(tg_event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Returns TRUE if trigger fired AFTER.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
tg_newtuple
|
||||
is a pointer to the new version of tuple if UPDATE and NULL if this is
|
||||
for an INSERT or a DELETE. This is what you are to return to Executor if
|
||||
UPDATE and you don't want to replace this tuple with another one or skip
|
||||
the operation.
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_FOR_ROW(event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Returns TRUE if trigger fired for
|
||||
a ROW-level event.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
tg_trigger
|
||||
is pointer to structure Trigger defined in src/include/utils/rel.h:
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_FOR_STATEMENT(event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Returns TRUE if trigger fired for
|
||||
STATEMENT-level event.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_BY_INSERT(event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Returns TRUE if trigger fired by INSERT.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_BY_DELETE(event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Returns TRUE if trigger fired by DELETE.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>TRIGGER_FIRED_BY_UPDATE(event)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Returns TRUE if trigger fired by UPDATE.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>tg_relation</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is a pointer to structure describing the triggered relation. Look at
|
||||
src/include/utils/rel.h for details about this structure. The most
|
||||
interest things are tg_relation->rd_att (descriptor of the relation
|
||||
tuples) and tg_relation->rd_rel->relname (relation's name. This is not
|
||||
char*, but NameData. Use SPI_getrelname(tg_relation) to get char* if
|
||||
you need a copy of name).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>tg_trigtuple</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is a pointer to the tuple for which the trigger is fired. This is the tuple
|
||||
being inserted (if INSERT), deleted (if DELETE) or updated (if UPDATE).
|
||||
If INSERT/DELETE then this is what you are to return to Executor if
|
||||
you don't want to replace tuple with another one (INSERT) or skip the
|
||||
operation.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>tg_newtuple</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is a pointer to the new version of tuple if UPDATE and NULL if this is
|
||||
for an INSERT or a DELETE. This is what you are to return to Executor if
|
||||
UPDATE and you don't want to replace this tuple with another one or skip
|
||||
the operation.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>tg_trigger</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is pointer to structure Trigger defined in src/include/utils/rel.h:
|
||||
|
||||
<programlisting>
|
||||
typedef struct Trigger
|
||||
{
|
||||
Oid tgoid;
|
||||
|
@ -197,64 +342,72 @@ typedef struct Trigger
|
|||
int16 tgattr[FUNC_MAX_ARGS];
|
||||
char **tgargs;
|
||||
} Trigger;
|
||||
</programlisting>
|
||||
|
||||
tgname is the trigger's name, tgnargs is number of arguments in tgargs,
|
||||
tgargs is an array of pointers to the arguments specified in the CREATE
|
||||
TRIGGER statement. Other members are for internal use only.
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</Sect1>
|
||||
where
|
||||
tgname is the trigger's name, tgnargs is number of arguments in tgargs,
|
||||
tgargs is an array of pointers to the arguments specified in the CREATE
|
||||
TRIGGER statement. Other members are for internal use only.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Visibility of Data Changes</Title>
|
||||
<sect1>
|
||||
<title>Visibility of Data Changes</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName> data changes visibility rule: during a query execution, data
|
||||
changes made by the query itself (via SQL-function, SPI-function, triggers)
|
||||
are invisible to the query scan. For example, in query
|
||||
<para>
|
||||
<productname>Postgres</productname> data changes visibility rule: during a query execution, data
|
||||
changes made by the query itself (via SQL-function, SPI-function, triggers)
|
||||
are invisible to the query scan. For example, in query
|
||||
|
||||
<ProgramListing>
|
||||
INSERT INTO a SELECT * FROM a
|
||||
</ProgramListing>
|
||||
<programlisting>
|
||||
INSERT INTO a SELECT * FROM a;
|
||||
</programlisting>
|
||||
|
||||
tuples inserted are invisible for SELECT' scan. In effect, this
|
||||
duplicates the database table within itself (subject to unique index
|
||||
rules, of course) without recursing.
|
||||
</Para>
|
||||
tuples inserted are invisible for SELECT scan. In effect, this
|
||||
duplicates the database table within itself (subject to unique index
|
||||
rules, of course) without recursing.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
But keep in mind this notice about visibility in the SPI documentation:
|
||||
<para>
|
||||
But keep in mind this notice about visibility in the SPI documentation:
|
||||
|
||||
<ProgramListing>
|
||||
Changes made by query Q are visible by queries which are started after
|
||||
query Q, no matter whether they are started inside Q (during the
|
||||
execution of Q) or after Q is done.
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
<blockquote>
|
||||
<para>
|
||||
Changes made by query Q are visible by queries which are started after
|
||||
query Q, no matter whether they are started inside Q (during the
|
||||
execution of Q) or after Q is done.
|
||||
</para>
|
||||
</blockquote>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
This is true for triggers as well so, though a tuple being inserted
|
||||
(tg_trigtuple) is not visible to queries in a BEFORE trigger, this tuple
|
||||
(just inserted) is visible to queries in an AFTER trigger, and to queries
|
||||
in BEFORE/AFTER triggers fired after this!
|
||||
</Para>
|
||||
</Sect1>
|
||||
<para>
|
||||
This is true for triggers as well so, though a tuple being inserted
|
||||
(tg_trigtuple) is not visible to queries in a BEFORE trigger, this tuple
|
||||
(just inserted) is visible to queries in an AFTER trigger, and to queries
|
||||
in BEFORE/AFTER triggers fired after this!
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<Sect1>
|
||||
<Title>Examples</Title>
|
||||
<sect1>
|
||||
<title>Examples</title>
|
||||
|
||||
<Para>
|
||||
There are more complex examples in in src/test/regress/regress.c and
|
||||
in contrib/spi.
|
||||
</Para>
|
||||
<para>
|
||||
There are more complex examples in
|
||||
<filename>src/test/regress/regress.c</filename> and
|
||||
in <filename>contrib/spi</filename>.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
Here is a very simple example of trigger usage. Function trigf reports
|
||||
the number of tuples in the triggered relation ttest and skips the
|
||||
operation if the query attempts to insert NULL into x (i.e - it acts as a
|
||||
NOT NULL constraint but doesn't abort the transaction).
|
||||
<para>
|
||||
Here is a very simple example of trigger usage. Function trigf reports
|
||||
the number of tuples in the triggered relation ttest and skips the
|
||||
operation if the query attempts to insert NULL into x (i.e - it acts as a
|
||||
NOT NULL constraint but doesn't abort the transaction).
|
||||
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
#include "executor/spi.h" /* this is what you need to work with SPI */
|
||||
#include "commands/trigger.h" /* -"- and triggers */
|
||||
|
||||
|
@ -317,16 +470,19 @@ trigf()
|
|||
|
||||
return (rettuple);
|
||||
}
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
Now, compile and
|
||||
create table ttest (x int4);
|
||||
<para>
|
||||
Now, compile and
|
||||
create table ttest (x int4):
|
||||
|
||||
<programlisting>
|
||||
create function trigf () returns opaque as
|
||||
'...path_to_so' language 'c';
|
||||
</programlisting>
|
||||
|
||||
<ProgramListing>
|
||||
<programlisting>
|
||||
vac=> create trigger tbefore before insert or update or delete on ttest
|
||||
for each row execute procedure trigf();
|
||||
CREATE
|
||||
|
@ -395,8 +551,25 @@ vac=> select * from ttest;
|
|||
x
|
||||
-
|
||||
(0 rows)
|
||||
</ProgramListing>
|
||||
</programlisting>
|
||||
|
||||
</Para>
|
||||
</Sect1>
|
||||
</Chapter>
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/tutorial.sgml,v 1.9 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/tutorial.sgml,v 1.10 2000/05/02 20:01:53 thomas Exp $
|
||||
|
||||
Postgres tutorial. Derived from postgres.sgml.
|
||||
thomas 1998-02-23
|
||||
|
@ -23,27 +23,28 @@ thomas 1998-02-23
|
|||
<!entity sql SYSTEM "sql.sgml">
|
||||
<!entity start SYSTEM "start.sgml">
|
||||
]>
|
||||
<Book Id="tutorial">
|
||||
|
||||
<book id="tutorial">
|
||||
|
||||
<!-- Title information -->
|
||||
|
||||
<Title>PostgreSQL Tutorial</Title>
|
||||
<BookInfo>
|
||||
<ReleaseInfo>Covering v6.5 for general release</ReleaseInfo>
|
||||
<BookBiblio>
|
||||
<AuthorGroup>
|
||||
<CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
|
||||
</AuthorGroup>
|
||||
<title>PostgreSQL Tutorial</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v7.0 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
</authorgroup>
|
||||
<!-- editor in authorgroup is not supported
|
||||
<AuthorGroup>
|
||||
-->
|
||||
<Editor>
|
||||
<FirstName>Thomas</FirstName>
|
||||
<SurName>Lockhart</SurName>
|
||||
<Affiliation>
|
||||
<OrgName>Caltech/JPL</OrgName>
|
||||
</Affiliation>
|
||||
</Editor>
|
||||
<editor>
|
||||
<firstname>Thomas</firstname>
|
||||
<surname>Lockhart</surname>
|
||||
<affiliation>
|
||||
<orgname>Caltech/JPL</orgname>
|
||||
</affiliation>
|
||||
</editor>
|
||||
<!--
|
||||
</AuthorGroup>
|
||||
-->
|
||||
|
@ -52,17 +53,17 @@ thomas 1998-02-23
|
|||
<AuthorInitials>TGL</AuthorInitials>
|
||||
-->
|
||||
|
||||
<Date>(last updated 1999-05-19)</Date>
|
||||
</BookBiblio>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<LegalNotice>
|
||||
<Para>
|
||||
<ProductName>PostgreSQL</ProductName> is Copyright © 1996-9
|
||||
by the Postgres Global Development Group.
|
||||
</Para>
|
||||
</LegalNotice>
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
</BookInfo>
|
||||
</bookinfo>
|
||||
|
||||
<!--
|
||||
<TOC> </TOC>
|
||||
|
@ -77,20 +78,20 @@ Your name here...
|
|||
</Dedication>
|
||||
-->
|
||||
|
||||
<Preface>
|
||||
<Title>Summary</Title>
|
||||
<preface>
|
||||
<title>Summary</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName>,
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<ProductName>PostgreSQL</ProductName> is an open-source descendant
|
||||
<productname>PostgreSQL</productname> is an open-source descendant
|
||||
of this original Berkeley code.
|
||||
</Para>
|
||||
</Preface>
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
&intro;
|
||||
&sql;
|
||||
|
@ -105,7 +106,7 @@ Your name here...
|
|||
<INDEX> </INDEX>
|
||||
-->
|
||||
|
||||
</Book>
|
||||
</book>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
|
|
|
@ -378,7 +378,7 @@ the "preferred type" for strings, <type>text</type>, for this query.
|
|||
|
||||
<note>
|
||||
<para>
|
||||
If a user defines a new type and defines an operator <quote>||</quote> to work
|
||||
If a user defines a new type and defines an operator "<literal>||</literal>" to work
|
||||
with it, then this query would no longer succeed as written. The parser would
|
||||
now have candidate types from two categories, and could not decide which to use.
|
||||
</para>
|
||||
|
@ -721,3 +721,20 @@ tgl=> SELECT f AS "Floating point" from ff;
|
|||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.18 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.19 2000/05/02 20:01:53 thomas Exp $
|
||||
-->
|
||||
|
||||
<!doctype book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
|
||||
|
@ -39,27 +39,27 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.18 2000/03/31 03:27:41
|
|||
%allfiles;
|
||||
]>
|
||||
|
||||
<Book Id="user">
|
||||
<book id="user">
|
||||
|
||||
<!-- Title information -->
|
||||
|
||||
<Title>PostgreSQL User's Guide</Title>
|
||||
<BookInfo>
|
||||
<ReleaseInfo>Covering v6.5 for general release</ReleaseInfo>
|
||||
<BookBiblio>
|
||||
<AuthorGroup>
|
||||
<CorpAuthor>The PostgreSQL Development Team</CorpAuthor>
|
||||
</AuthorGroup>
|
||||
<title>PostgreSQL User's Guide</title>
|
||||
<bookinfo>
|
||||
<releaseinfo>Covering v7.0 for general release</releaseinfo>
|
||||
<bookbiblio>
|
||||
<authorgroup>
|
||||
<corpauthor>The PostgreSQL Development Team</corpauthor>
|
||||
</authorgroup>
|
||||
<!-- editor in authorgroup is not supported
|
||||
<AuthorGroup>
|
||||
-->
|
||||
<Editor>
|
||||
<FirstName>Thomas</FirstName>
|
||||
<SurName>Lockhart</SurName>
|
||||
<Affiliation>
|
||||
<OrgName>Caltech/JPL</OrgName>
|
||||
</Affiliation>
|
||||
</Editor>
|
||||
<editor>
|
||||
<firstname>Thomas</firstname>
|
||||
<surname>Lockhart</surname>
|
||||
<affiliation>
|
||||
<orgname>Caltech/JPL</orgname>
|
||||
</affiliation>
|
||||
</editor>
|
||||
<!--
|
||||
</AuthorGroup>
|
||||
-->
|
||||
|
@ -68,17 +68,17 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.18 2000/03/31 03:27:41
|
|||
<AuthorInitials>TGL</AuthorInitials>
|
||||
-->
|
||||
|
||||
<Date>(last updated 1999-06-01)</Date>
|
||||
</BookBiblio>
|
||||
<date>(last updated 2000-05-01)</date>
|
||||
</bookbiblio>
|
||||
|
||||
<LegalNotice>
|
||||
<Para>
|
||||
<ProductName>PostgreSQL</ProductName> is Copyright © 1996-9
|
||||
by the Postgres Global Development Group.
|
||||
</Para>
|
||||
</LegalNotice>
|
||||
<legalnotice>
|
||||
<para>
|
||||
<productname>PostgreSQL</productname> is Copyright © 1996-2000
|
||||
by PostgreSQL Inc.
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
</BookInfo>
|
||||
</bookinfo>
|
||||
|
||||
<!--
|
||||
<TOC> </TOC>
|
||||
|
@ -94,19 +94,19 @@ Your name here...
|
|||
-->
|
||||
|
||||
<preface id="preface">
|
||||
<Title>Summary</Title>
|
||||
<title>Summary</title>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName>,
|
||||
<para>
|
||||
<productname>Postgres</productname>,
|
||||
developed originally in the UC Berkeley Computer Science Department,
|
||||
pioneered many of the object-relational concepts
|
||||
now becoming available in some commercial databases.
|
||||
It provides SQL92/SQL3 language support,
|
||||
transaction integrity, and type extensibility.
|
||||
<ProductName>PostgreSQL</ProductName> is an open-source descendant
|
||||
<productname>PostgreSQL</productname> is an open-source descendant
|
||||
of this original Berkeley code.
|
||||
</Para>
|
||||
</Preface>
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
&intro;
|
||||
&syntax;
|
||||
|
@ -142,7 +142,7 @@ Your name here...
|
|||
</index>
|
||||
-->
|
||||
|
||||
</Book>
|
||||
</book>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.13 2000/03/31 03:27:41 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/xfunc.sgml,v 1.14 2000/05/02 20:01:53 thomas Exp $
|
||||
-->
|
||||
|
||||
<chapter id="xfunc">
|
||||
|
@ -123,16 +123,16 @@ select function hobbies (EMP) returns set of HOBBIES
|
|||
simply returns a base type, such as <literal>int4</literal>:
|
||||
|
||||
<programlisting>
|
||||
CREATE FUNCTION one() RETURNS int4
|
||||
AS 'SELECT 1 as RESULT' LANGUAGE 'sql';
|
||||
CREATE FUNCTION one() RETURNS int4
|
||||
AS 'SELECT 1 as RESULT' LANGUAGE 'sql';
|
||||
|
||||
SELECT one() AS answer;
|
||||
SELECT one() AS answer;
|
||||
|
||||
+-------+
|
||||
|answer |
|
||||
+-------+
|
||||
|1 |
|
||||
+-------+
|
||||
+-------+
|
||||
|answer |
|
||||
+-------+
|
||||
|1 |
|
||||
+-------+
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
|
@ -149,16 +149,16 @@ select function hobbies (EMP) returns set of HOBBIES
|
|||
and $2:
|
||||
|
||||
<programlisting>
|
||||
CREATE FUNCTION add_em(int4, int4) RETURNS int4
|
||||
AS 'SELECT $1 + $2;' LANGUAGE 'sql';
|
||||
CREATE FUNCTION add_em(int4, int4) RETURNS int4
|
||||
AS 'SELECT $1 + $2;' LANGUAGE 'sql';
|
||||
|
||||
SELECT add_em(1, 2) AS answer;
|
||||
SELECT add_em(1, 2) AS answer;
|
||||
|
||||
+-------+
|
||||
|answer |
|
||||
+-------+
|
||||
|3 |
|
||||
+-------+
|
||||
+-------+
|
||||
|answer |
|
||||
+-------+
|
||||
|3 |
|
||||
+-------+
|
||||
</programlisting>
|
||||
</para>
|
||||
</sect2>
|
||||
|
@ -175,19 +175,19 @@ select function hobbies (EMP) returns set of HOBBIES
|
|||
salary would be if it were doubled:
|
||||
|
||||
<programlisting>
|
||||
CREATE FUNCTION double_salary(EMP) RETURNS int4
|
||||
AS 'SELECT $1.salary * 2 AS salary;' LANGUAGE 'sql';
|
||||
CREATE FUNCTION double_salary(EMP) RETURNS int4
|
||||
AS 'SELECT $1.salary * 2 AS salary;' LANGUAGE 'sql';
|
||||
|
||||
SELECT name, double_salary(EMP) AS dream
|
||||
FROM EMP
|
||||
WHERE EMP.cubicle ~= '(2,1)'::point;
|
||||
|
||||
SELECT name, double_salary(EMP) AS dream
|
||||
FROM EMP
|
||||
WHERE EMP.cubicle ~= '(2,1)'::point;
|
||||
|
||||
|
||||
+-----+-------+
|
||||
|name | dream |
|
||||
+-----+-------+
|
||||
|Sam | 2400 |
|
||||
+-----+-------+
|
||||
+-----+-------+
|
||||
|name | dream |
|
||||
+-----+-------+
|
||||
|Sam | 2400 |
|
||||
+-----+-------+
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
|
@ -199,19 +199,19 @@ select function hobbies (EMP) returns set of HOBBIES
|
|||
notation attribute(class) and class.attribute interchangably:
|
||||
|
||||
<programlisting>
|
||||
--
|
||||
-- this is the same as:
|
||||
-- SELECT EMP.name AS youngster FROM EMP WHERE EMP.age < 30
|
||||
--
|
||||
SELECT name(EMP) AS youngster
|
||||
FROM EMP
|
||||
WHERE age(EMP) < 30;
|
||||
--
|
||||
-- this is the same as:
|
||||
-- SELECT EMP.name AS youngster FROM EMP WHERE EMP.age < 30
|
||||
--
|
||||
SELECT name(EMP) AS youngster
|
||||
FROM EMP
|
||||
WHERE age(EMP) < 30;
|
||||
|
||||
+----------+
|
||||
|youngster |
|
||||
+----------+
|
||||
|Sam |
|
||||
+----------+
|
||||
+----------+
|
||||
|youngster |
|
||||
+----------+
|
||||
|Sam |
|
||||
+----------+
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
|
@ -223,12 +223,12 @@ select function hobbies (EMP) returns set of HOBBIES
|
|||
that returns a single EMP instance:
|
||||
|
||||
<programlisting>
|
||||
CREATE FUNCTION new_emp() RETURNS EMP
|
||||
AS 'SELECT \'None\'::text AS name,
|
||||
1000 AS salary,
|
||||
25 AS age,
|
||||
\'(2,2)\'::point AS cubicle'
|
||||
LANGUAGE 'sql';
|
||||
CREATE FUNCTION new_emp() RETURNS EMP
|
||||
AS 'SELECT \'None\'::text AS name,
|
||||
1000 AS salary,
|
||||
25 AS age,
|
||||
\'(2,2)\'::point AS cubicle'
|
||||
LANGUAGE 'sql';
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
|
@ -266,13 +266,13 @@ WARN::function declared to return type EMP does not retrieve (EMP.*)
|
|||
entire instance into another function.
|
||||
|
||||
<programlisting>
|
||||
SELECT name(new_emp()) AS nobody;
|
||||
SELECT name(new_emp()) AS nobody;
|
||||
|
||||
+-------+
|
||||
|nobody |
|
||||
+-------+
|
||||
|None |
|
||||
+-------+
|
||||
+-------+
|
||||
|nobody |
|
||||
+-------+
|
||||
|None |
|
||||
+-------+
|
||||
</programlisting>
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -285,8 +285,8 @@ WARN::function declared to return type EMP does not retrieve (EMP.*)
|
|||
with function calls.
|
||||
|
||||
<programlisting>
|
||||
SELECT new_emp().name AS nobody;
|
||||
WARN:parser: syntax error at or near "."
|
||||
SELECT new_emp().name AS nobody;
|
||||
WARN:parser: syntax error at or near "."
|
||||
</programlisting>
|
||||
</para>
|
||||
</listitem>
|
||||
|
@ -303,19 +303,18 @@ WARN::function declared to return type EMP does not retrieve (EMP.*)
|
|||
specified as the function's returntype.
|
||||
|
||||
<programlisting>
|
||||
CREATE FUNCTION clean_EMP () RETURNS int4
|
||||
AS 'DELETE FROM EMP WHERE EMP.salary <= 0;
|
||||
SELECT 1 AS ignore_this'
|
||||
LANGUAGE 'sql';
|
||||
CREATE FUNCTION clean_EMP () RETURNS int4
|
||||
AS 'DELETE FROM EMP WHERE EMP.salary <= 0;
|
||||
SELECT 1 AS ignore_this'
|
||||
LANGUAGE 'sql';
|
||||
|
||||
SELECT clean_EMP();
|
||||
SELECT clean_EMP();
|
||||
|
||||
+--+
|
||||
|x |
|
||||
+--+
|
||||
|1 |
|
||||
+--+
|
||||
|
||||
+--+
|
||||
|x |
|
||||
+--+
|
||||
|1 |
|
||||
+--+
|
||||
</programlisting>
|
||||
</para>
|
||||
</sect2>
|
||||
|
@ -688,62 +687,62 @@ memmove(destination->data, buffer, 40);
|
|||
Suppose <filename>funcs.c</filename> look like:
|
||||
|
||||
<programlisting>
|
||||
#include <string.h>
|
||||
#include "postgres.h"
|
||||
#include <string.h>
|
||||
#include "postgres.h"
|
||||
|
||||
/* By Value */
|
||||
/* By Value */
|
||||
|
||||
int
|
||||
add_one(int arg)
|
||||
{
|
||||
return(arg + 1);
|
||||
}
|
||||
|
||||
/* By Reference, Fixed Length */
|
||||
|
||||
Point *
|
||||
makepoint(Point *pointx, Point *pointy )
|
||||
{
|
||||
Point *new_point = (Point *) palloc(sizeof(Point));
|
||||
|
||||
new_point->x = pointx->x;
|
||||
new_point->y = pointy->y;
|
||||
|
||||
return new_point;
|
||||
}
|
||||
|
||||
/* By Reference, Variable Length */
|
||||
|
||||
text *
|
||||
copytext(text *t)
|
||||
{
|
||||
/*
|
||||
* VARSIZE is the total size of the struct in bytes.
|
||||
*/
|
||||
text *new_t = (text *) palloc(VARSIZE(t));
|
||||
memset(new_t, 0, VARSIZE(t));
|
||||
VARSIZE(new_t) = VARSIZE(t);
|
||||
/*
|
||||
* VARDATA is a pointer to the data region of the struct.
|
||||
*/
|
||||
memcpy((void *) VARDATA(new_t), /* destination */
|
||||
(void *) VARDATA(t), /* source */
|
||||
VARSIZE(t)-VARHDRSZ); /* how many bytes */
|
||||
return(new_t);
|
||||
}
|
||||
|
||||
text *
|
||||
concat_text(text *arg1, text *arg2)
|
||||
{
|
||||
int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
|
||||
text *new_text = (text *) palloc(new_text_size);
|
||||
int
|
||||
add_one(int arg)
|
||||
{
|
||||
return(arg + 1);
|
||||
}
|
||||
|
||||
memset((void *) new_text, 0, new_text_size);
|
||||
VARSIZE(new_text) = new_text_size;
|
||||
strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1)-VARHDRSZ);
|
||||
strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2)-VARHDRSZ);
|
||||
return (new_text);
|
||||
}
|
||||
/* By Reference, Fixed Length */
|
||||
|
||||
Point *
|
||||
makepoint(Point *pointx, Point *pointy )
|
||||
{
|
||||
Point *new_point = (Point *) palloc(sizeof(Point));
|
||||
|
||||
new_point->x = pointx->x;
|
||||
new_point->y = pointy->y;
|
||||
|
||||
return new_point;
|
||||
}
|
||||
|
||||
/* By Reference, Variable Length */
|
||||
|
||||
text *
|
||||
copytext(text *t)
|
||||
{
|
||||
/*
|
||||
* VARSIZE is the total size of the struct in bytes.
|
||||
*/
|
||||
text *new_t = (text *) palloc(VARSIZE(t));
|
||||
memset(new_t, 0, VARSIZE(t));
|
||||
VARSIZE(new_t) = VARSIZE(t);
|
||||
/*
|
||||
* VARDATA is a pointer to the data region of the struct.
|
||||
*/
|
||||
memcpy((void *) VARDATA(new_t), /* destination */
|
||||
(void *) VARDATA(t), /* source */
|
||||
VARSIZE(t)-VARHDRSZ); /* how many bytes */
|
||||
return(new_t);
|
||||
}
|
||||
|
||||
text *
|
||||
concat_text(text *arg1, text *arg2)
|
||||
{
|
||||
int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
|
||||
text *new_text = (text *) palloc(new_text_size);
|
||||
|
||||
memset((void *) new_text, 0, new_text_size);
|
||||
VARSIZE(new_text) = new_text_size;
|
||||
strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1)-VARHDRSZ);
|
||||
strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2)-VARHDRSZ);
|
||||
return (new_text);
|
||||
}
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -751,17 +750,17 @@ memmove(destination->data, buffer, 40);
|
|||
On <acronym>OSF/1</acronym> we would type:
|
||||
|
||||
<programlisting>
|
||||
CREATE FUNCTION add_one(int4) RETURNS int4
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
CREATE FUNCTION add_one(int4) RETURNS int4
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
|
||||
CREATE FUNCTION makepoint(point, point) RETURNS point
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
|
||||
CREATE FUNCTION concat_text(text, text) RETURNS text
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
|
||||
CREATE FUNCTION copytext(text) RETURNS text
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
CREATE FUNCTION makepoint(point, point) RETURNS point
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
|
||||
CREATE FUNCTION concat_text(text, text) RETURNS text
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
|
||||
CREATE FUNCTION copytext(text) RETURNS text
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/funcs.so' LANGUAGE 'c';
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -796,20 +795,20 @@ memmove(destination->data, buffer, 40);
|
|||
In the query above, we can define c_overpaid as:
|
||||
|
||||
<programlisting>
|
||||
#include "postgres.h"
|
||||
#include "executor/executor.h" /* for GetAttributeByName() */
|
||||
|
||||
bool
|
||||
c_overpaid(TupleTableSlot *t, /* the current instance of EMP */
|
||||
int4 limit)
|
||||
{
|
||||
bool isnull = false;
|
||||
int4 salary;
|
||||
salary = (int4) GetAttributeByName(t, "salary", &isnull);
|
||||
if (isnull)
|
||||
return (false);
|
||||
return(salary > limit);
|
||||
}
|
||||
#include "postgres.h"
|
||||
#include "executor/executor.h" /* for GetAttributeByName() */
|
||||
|
||||
bool
|
||||
c_overpaid(TupleTableSlot *t, /* the current instance of EMP */
|
||||
int4 limit)
|
||||
{
|
||||
bool isnull = false;
|
||||
int4 salary;
|
||||
salary = (int4) GetAttributeByName(t, "salary", &isnull);
|
||||
if (isnull)
|
||||
return (false);
|
||||
return(salary > limit);
|
||||
}
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -827,9 +826,9 @@ memmove(destination->data, buffer, 40);
|
|||
call would look like:
|
||||
|
||||
<programlisting>
|
||||
char *str;
|
||||
...
|
||||
str = (char *) GetAttributeByName(t, "name", &isnull)
|
||||
char *str;
|
||||
...
|
||||
str = (char *) GetAttributeByName(t, "name", &isnull)
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -838,8 +837,8 @@ memmove(destination->data, buffer, 40);
|
|||
know about the c_overpaid function:
|
||||
|
||||
<programlisting>
|
||||
* CREATE FUNCTION c_overpaid(EMP, int4) RETURNS bool
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/obj/funcs.so' LANGUAGE 'c';
|
||||
* CREATE FUNCTION c_overpaid(EMP, int4) RETURNS bool
|
||||
AS '<replaceable>PGROOT</replaceable>/tutorial/obj/funcs.so' LANGUAGE 'c';
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
<Chapter Id="xtypes">
|
||||
<Title>Extending <Acronym>SQL</Acronym>: Types</Title>
|
||||
<Para>
|
||||
As previously mentioned, there are two kinds of types
|
||||
in <ProductName>Postgres</ProductName>: base types (defined in a programming language)
|
||||
and composite types (instances).
|
||||
Examples in this section up to interfacing indices can
|
||||
be found in <FileName>complex.sql</FileName> and <FileName>complex.c</FileName>. Composite examples
|
||||
are in <FileName>funcs.sql</FileName>.
|
||||
</Para>
|
||||
<chapter id="xtypes">
|
||||
<title>Extending <acronym>SQL</acronym>: Types</title>
|
||||
<para>
|
||||
As previously mentioned, there are two kinds of types
|
||||
in <productname>Postgres</productname>: base types (defined in a programming language)
|
||||
and composite types (instances).
|
||||
Examples in this section up to interfacing indices can
|
||||
be found in <filename>complex.sql</filename> and <filename>complex.c</filename>. Composite examples
|
||||
are in <filename>funcs.sql</filename>.
|
||||
</para>
|
||||
|
||||
<Sect1>
|
||||
<Title>User-Defined Types</Title>
|
||||
<sect1>
|
||||
<title>User-Defined Types</title>
|
||||
|
||||
<Sect2>
|
||||
<Title>Functions Needed for a User-Defined Type</Title>
|
||||
<Para>
|
||||
<sect2>
|
||||
<title>Functions Needed for a User-Defined Type</title>
|
||||
<para>
|
||||
A user-defined type must always have input and output
|
||||
functions. These functions determine how the type
|
||||
appears in strings (for input by the user and output to
|
||||
|
@ -26,124 +26,152 @@
|
|||
delimited character string.
|
||||
Suppose we want to define a complex type which represents
|
||||
complex numbers. Naturally, we choose to represent a
|
||||
complex in memory as the following <Acronym>C</Acronym> structure:
|
||||
<ProgramListing>
|
||||
typedef struct Complex {
|
||||
double x;
|
||||
double y;
|
||||
} Complex;
|
||||
</ProgramListing>
|
||||
complex in memory as the following <acronym>C</acronym> structure:
|
||||
|
||||
<programlisting>
|
||||
typedef struct Complex {
|
||||
double x;
|
||||
double y;
|
||||
} Complex;
|
||||
</programlisting>
|
||||
|
||||
and a string of the form (x,y) as the external string
|
||||
representation.
|
||||
These functions are usually not hard to write, especially
|
||||
the output function. However, there are a number of points
|
||||
to remember:
|
||||
|
||||
<ItemizedList>
|
||||
<ListItem>
|
||||
<Para> When defining your external (string) representation,
|
||||
remember that you must eventually write a
|
||||
complete and robust parser for that representation
|
||||
as your input function!
|
||||
<ProgramListing>
|
||||
Complex *
|
||||
complex_in(char *str)
|
||||
{
|
||||
double x, y;
|
||||
Complex *result;
|
||||
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) {
|
||||
elog(WARN, "complex_in: error in parsing
|
||||
return NULL;
|
||||
}
|
||||
result = (Complex *)palloc(sizeof(Complex));
|
||||
result->x = x;
|
||||
result->y = y;
|
||||
return (result);
|
||||
}
|
||||
</ProgramListing>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para> When defining your external (string) representation,
|
||||
remember that you must eventually write a
|
||||
complete and robust parser for that representation
|
||||
as your input function!
|
||||
|
||||
The output function can simply be:
|
||||
<ProgramListing>
|
||||
char *
|
||||
complex_out(Complex *complex)
|
||||
{
|
||||
char *result;
|
||||
if (complex == NULL)
|
||||
return(NULL);
|
||||
result = (char *) palloc(60);
|
||||
sprintf(result, "(%g,%g)", complex->x, complex->y);
|
||||
return(result);
|
||||
}
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<Para> You should try to make the input and output
|
||||
functions inverses of each other. If you do
|
||||
not, you will have severe problems when you need
|
||||
to dump your data into a file and then read it
|
||||
back in (say, into someone else's database on
|
||||
another computer). This is a particularly common
|
||||
problem when floating-point numbers are
|
||||
involved.
|
||||
</Para>
|
||||
</ListItem>
|
||||
</ItemizedList>
|
||||
</para>
|
||||
<Para>
|
||||
To define the <Acronym>complex</Acronym> type, we need to create the two
|
||||
<programlisting>
|
||||
Complex *
|
||||
complex_in(char *str)
|
||||
{
|
||||
double x, y;
|
||||
Complex *result;
|
||||
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) {
|
||||
elog(WARN, "complex_in: error in parsing
|
||||
return NULL;
|
||||
}
|
||||
result = (Complex *)palloc(sizeof(Complex));
|
||||
result->x = x;
|
||||
result->y = y;
|
||||
return (result);
|
||||
}
|
||||
</programlisting>
|
||||
|
||||
The output function can simply be:
|
||||
|
||||
<programlisting>
|
||||
char *
|
||||
complex_out(Complex *complex)
|
||||
{
|
||||
char *result;
|
||||
if (complex == NULL)
|
||||
return(NULL);
|
||||
result = (char *) palloc(60);
|
||||
sprintf(result, "(%g,%g)", complex->x, complex->y);
|
||||
return(result);
|
||||
}
|
||||
</programlisting>
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
You should try to make the input and output
|
||||
functions inverses of each other. If you do
|
||||
not, you will have severe problems when you need
|
||||
to dump your data into a file and then read it
|
||||
back in (say, into someone else's database on
|
||||
another computer). This is a particularly common
|
||||
problem when floating-point numbers are
|
||||
involved.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
To define the <acronym>complex</acronym> type, we need to create the two
|
||||
user-defined functions complex_in and complex_out
|
||||
before creating the type:
|
||||
<ProgramListing>
|
||||
CREATE FUNCTION complex_in(opaque)
|
||||
RETURNS complex
|
||||
AS 'PGROOT/tutorial/obj/complex.so'
|
||||
LANGUAGE 'c';
|
||||
|
||||
CREATE FUNCTION complex_out(opaque)
|
||||
RETURNS opaque
|
||||
AS 'PGROOT/tutorial/obj/complex.so'
|
||||
LANGUAGE 'c';
|
||||
<programlisting>
|
||||
CREATE FUNCTION complex_in(opaque)
|
||||
RETURNS complex
|
||||
AS 'PGROOT/tutorial/obj/complex.so'
|
||||
LANGUAGE 'c';
|
||||
|
||||
CREATE TYPE complex (
|
||||
internallength = 16,
|
||||
input = complex_in,
|
||||
output = complex_out
|
||||
);
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
CREATE FUNCTION complex_out(opaque)
|
||||
RETURNS opaque
|
||||
AS 'PGROOT/tutorial/obj/complex.so'
|
||||
LANGUAGE 'c';
|
||||
|
||||
<Para>
|
||||
As discussed earlier, <ProductName>Postgres</ProductName> fully supports arrays of
|
||||
base types. Additionally, <ProductName>Postgres</ProductName> supports arrays of
|
||||
CREATE TYPE complex (
|
||||
internallength = 16,
|
||||
input = complex_in,
|
||||
output = complex_out
|
||||
);
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
As discussed earlier, <productname>Postgres</productname> fully supports arrays of
|
||||
base types. Additionally, <productname>Postgres</productname> supports arrays of
|
||||
user-defined types as well. When you define a type,
|
||||
<ProductName>Postgres</ProductName> automatically provides support for arrays of
|
||||
<productname>Postgres</productname> automatically provides support for arrays of
|
||||
that type. For historical reasons, the array type has
|
||||
the same name as the user-defined type with the
|
||||
underscore character _ prepended.
|
||||
Composite types do not need any function defined on
|
||||
them, since the system already understands what they
|
||||
look like inside.
|
||||
</Para>
|
||||
</sect2>
|
||||
<Sect2>
|
||||
<Title>Large Objects</Title>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<Para>
|
||||
<sect2>
|
||||
<title>Large Objects</title>
|
||||
|
||||
<para>
|
||||
The types discussed to this point are all "small"
|
||||
objects -- that is, they are smaller than 8KB in size.
|
||||
<Note>
|
||||
<Para>
|
||||
1024 longwords == 8192 bytes. In fact, the type must be considerably smaller than 8192 bytes,
|
||||
since the <ProductName>Postgres</ProductName> tuple
|
||||
and page overhead must also fit into this 8KB limitation.
|
||||
The actual value that fits depends on the machine architecture.
|
||||
</Para>
|
||||
</Note>
|
||||
<note>
|
||||
<para>
|
||||
1024 longwords == 8192 bytes. In fact, the type must be considerably smaller than 8192 bytes,
|
||||
since the <productname>Postgres</productname> tuple
|
||||
and page overhead must also fit into this 8KB limitation.
|
||||
The actual value that fits depends on the machine architecture.
|
||||
</para>
|
||||
</note>
|
||||
If you require a larger type for something like a document
|
||||
retrieval system or for storing bitmaps, you will
|
||||
need to use the <ProductName>Postgres</ProductName> large object interface.
|
||||
</para>
|
||||
</Sect2>
|
||||
</Sect1>
|
||||
</Chapter>
|
||||
need to use the <productname>Postgres</productname> large object
|
||||
interface, or will need to recompile the
|
||||
<productname>Postgres</productname> backend to use internal
|
||||
storage blocks greater than 8kbytes..
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/y2k.sgml,v 1.6 2000/04/07 13:30:58 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/y2k.sgml,v 1.7 2000/05/02 20:01:53 thomas Exp $
|
||||
-->
|
||||
|
||||
<sect1 id="y2k">
|
||||
|
@ -52,8 +52,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/y2k.sgml,v 1.6 2000/04/07 13:30:58 th
|
|||
<ulink url="http://www.postgresql.org/docs/user/datatype.htm">User's Guide</ulink>
|
||||
in the chapter on data types.
|
||||
For two-digit years, the significant transition year is 1970, not 2000;
|
||||
e.g. <quote>70-01-01</quote> is interpreted as <quote>1970-01-01</quote>,
|
||||
whereas <quote>69-01-01</quote> is interpreted as <quote>2069-01-01</quote>.
|
||||
e.g. "<literal>70-01-01</literal>" is interpreted as 1970-01-01,
|
||||
whereas "<literal>69-01-01</literal>" is interpreted as 2069-01-01.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
|
|
Loading…
Reference in New Issue