From 39f69bc38f0f58cc4f6b05451fced030bfac935e Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" <lockhart@fourpalms.org> Date: Mon, 27 Mar 2000 17:14:43 +0000 Subject: [PATCH] Start updating for the v7.0 release. Use "generic functions" for math and other routines. Use SQL92 "type 'literal'" syntax rather than Postgres "'literal'::type". --- doc/src/sgml/about.sgml | 6 +- doc/src/sgml/func.sgml | 1323 +++++++++--------- doc/src/sgml/odbc.sgml | 1816 +++++++++++++------------ doc/src/sgml/ref/abort.sgml | 4 +- doc/src/sgml/ref/alter_table.sgml | 8 +- doc/src/sgml/ref/alter_user.sgml | 4 +- doc/src/sgml/ref/begin.sgml | 10 +- doc/src/sgml/ref/create_database.sgml | 4 +- doc/src/sgml/ref/create_function.sgml | 57 +- doc/src/sgml/ref/create_group.sgml | 4 +- doc/src/sgml/ref/create_operator.sgml | 30 +- doc/src/sgml/ref/create_table.sgml | 132 +- doc/src/sgml/ref/create_trigger.sgml | 11 +- doc/src/sgml/ref/create_type.sgml | 6 +- doc/src/sgml/ref/create_user.sgml | 8 +- doc/src/sgml/ref/create_view.sgml | 22 +- doc/src/sgml/ref/createdb.sgml | 10 +- doc/src/sgml/ref/createlang.sgml | 6 +- doc/src/sgml/ref/createuser.sgml | 12 +- doc/src/sgml/ref/drop_user.sgml | 4 +- doc/src/sgml/ref/dropdb.sgml | 10 +- doc/src/sgml/ref/droplang.sgml | 6 +- doc/src/sgml/ref/dropuser.sgml | 10 +- doc/src/sgml/ref/end.sgml | 6 +- doc/src/sgml/ref/initdb.sgml | 8 +- doc/src/sgml/ref/initlocation.sgml | 6 +- doc/src/sgml/ref/insert.sgml | 6 +- doc/src/sgml/ref/pg_dump.sgml | 5 +- doc/src/sgml/ref/pg_upgrade.sgml | 4 +- doc/src/sgml/ref/pgadmin-ref.sgml | 4 +- doc/src/sgml/ref/postgres-ref.sgml | 4 +- doc/src/sgml/ref/psql-ref.sgml | 30 +- doc/src/sgml/ref/select.sgml | 12 +- doc/src/sgml/ref/vacuumdb.sgml | 8 +- 34 files changed, 1781 insertions(+), 1815 deletions(-) diff --git a/doc/src/sgml/about.sgml b/doc/src/sgml/about.sgml index b1435050cb..bf79ab78b5 100644 --- a/doc/src/sgml/about.sgml +++ b/doc/src/sgml/about.sgml @@ -3,7 +3,7 @@ <para> <productname>PostgreSQL</productname> is available without cost. This manual - describes version 6.5 of <productname>PostgreSQL</productname>. + describes version 7.0 of <productname>PostgreSQL</productname>. </para> <para> @@ -21,7 +21,7 @@ <!-- Keep this comment at the end of the file Local variables: -mode: sgml +mode:sgml sgml-omittag:nil sgml-shorttag:t sgml-minimize-attributes:nil @@ -31,7 +31,7 @@ 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-catalogs:("/usr/lib/sgml/catalog") sgml-local-ecat-files:nil End: --> diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 7fa24ec365..ecda5b8aaa 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -38,26 +38,26 @@ </thead> <tbody> <row> - <entry> COALESCE(<replaceable class="parameter">list</replaceable>) </entry> - <entry> non-NULL </entry> - <entry> return first non-NULL value in list </entry> - <entry> COALESCE(rle, c2 + 5, 0) </entry> + <entry>COALESCE(<replaceable class="parameter">list</replaceable>)</entry> + <entry>non-NULL</entry> + <entry>return first non-NULL value in list</entry> + <entry>COALESCE(rle, c2 + 5, 0)</entry> </row> <row> - <entry> NULLIF(<replaceable class="parameter">input</replaceable>,<replaceable class="parameter">value</replaceable>) </entry> - <entry> <replaceable class="parameter">input</replaceable> or NULL </entry> - <entry> return NULL if + <entry>NULLIF(<replaceable class="parameter">input</replaceable>,<replaceable class="parameter">value</replaceable>)</entry> + <entry><replaceable class="parameter">input</replaceable> or NULL</entry> + <entry>return NULL if <replaceable class="parameter">input</replaceable> = <replaceable class="parameter">value</replaceable>, else <replaceable class="parameter">input</replaceable> </entry> - <entry> NULLIF(c1, 'N/A') </entry> + <entry>NULLIF(c1, 'N/A')</entry> </row> <row> - <entry> CASE WHEN <replaceable class="parameter">expr</replaceable> THEN <replaceable class="parameter">expr</replaceable> [...] ELSE <replaceable class="parameter">expr</replaceable> END </entry> - <entry> <replaceable class="parameter">expr</replaceable> </entry> - <entry> return expression for first true WHEN clause </entry> - <entry> CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END </entry> + <entry>CASE WHEN <replaceable class="parameter">expr</replaceable> THEN <replaceable class="parameter">expr</replaceable> [...] ELSE <replaceable class="parameter">expr</replaceable> END</entry> + <entry><replaceable class="parameter">expr</replaceable></entry> + <entry>return expression for first true WHEN clause</entry> + <entry>CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END</entry> </row> </tbody> </tgroup> @@ -82,70 +82,70 @@ </thead> <tbody> <row> - <entry> abs(float8) </entry> - <entry> float8 </entry> - <entry> absolute value </entry> - <entry> abs(-17.4) </entry> + <entry>abs(float8)</entry> + <entry>float8</entry> + <entry>absolute value</entry> + <entry>abs(-17.4)</entry> </row> <row> - <entry> sqrt(float8) </entry> - <entry> float8 </entry> - <entry> square root </entry> - <entry> sqrt(2.0) </entry> + <entry>sqrt(float8)</entry> + <entry>float8</entry> + <entry>square root</entry> + <entry>sqrt(2.0)</entry> </row> <row> - <entry> exp(float8) </entry> - <entry> float8 </entry> - <entry> raise e to the specified exponent </entry> - <entry> exp(2.0) </entry> + <entry>exp(float8)</entry> + <entry>float8</entry> + <entry>raise e to the specified exponent</entry> + <entry>exp(2.0)</entry> </row> <row> - <entry> ln(float8) </entry> - <entry> float8 </entry> - <entry> natural logarithm </entry> - <entry> ln(2.0) </entry> + <entry>ln(float8)</entry> + <entry>float8</entry> + <entry>natural logarithm</entry> + <entry>ln(2.0)</entry> </row> <row> - <entry> log(float8) </entry> - <entry> float8 </entry> - <entry> base 10 logarithm </entry> - <entry> log(2.0) </entry> + <entry>log(float8)</entry> + <entry>float8</entry> + <entry>base 10 logarithm</entry> + <entry>log(2.0)</entry> </row> <row> - <entry> pow(float8,float8) </entry> - <entry> float8 </entry> - <entry> raise a number to the specified exponent </entry> - <entry> pow(2.0, 16.0) </entry> + <entry>pow(float8,float8)</entry> + <entry>float8</entry> + <entry>raise a number to the specified exponent</entry> + <entry>pow(2.0, 16.0)</entry> </row> <row> - <entry> round(float8) </entry> - <entry> float8 </entry> - <entry> round to nearest integer </entry> - <entry> round(42.4) </entry> + <entry>round(float8)</entry> + <entry>float8</entry> + <entry>round to nearest integer</entry> + <entry>round(42.4)</entry> </row> <row> - <entry> trunc(float8) </entry> - <entry> float8 </entry> - <entry> truncate (towards zero) </entry> - <entry> trunc(42.4) </entry> + <entry>trunc(float8)</entry> + <entry>float8</entry> + <entry>truncate (towards zero)</entry> + <entry>trunc(42.4)</entry> </row> <row> - <entry> float(int) </entry> - <entry> float8 </entry> - <entry> convert integer to floating point </entry> - <entry> float(2) </entry> + <entry>float(int)</entry> + <entry>float8</entry> + <entry>convert integer to floating point</entry> + <entry>float(2)</entry> </row> <row> - <entry> float4(int) </entry> - <entry> float4 </entry> - <entry> convert integer to floating point </entry> - <entry> float4(2) </entry> + <entry>float4(int)</entry> + <entry>float4</entry> + <entry>convert integer to floating point</entry> + <entry>float4(2)</entry> </row> <row> - <entry> integer(float) </entry> - <entry> int </entry> - <entry> convert floating point to integer </entry> - <entry> integer(2.0) </entry> + <entry>integer(float)</entry> + <entry>int</entry> + <entry>convert floating point to integer</entry> + <entry>integer(2.0)</entry> </row> </tbody> </tgroup> @@ -153,8 +153,8 @@ </para> <para> - Most of the functions listed for FLOAT8 are also available for - type NUMERIC. + Most of the functions listed for FLOAT8 are also available for + type NUMERIC. </para> </sect1> @@ -182,52 +182,52 @@ </thead> <tbody> <row> - <entry> char_length(string) </entry> - <entry> int4 </entry> - <entry> length of string </entry> - <entry> char_length('jose') </entry> + <entry>char_length(string)</entry> + <entry>int4</entry> + <entry>length of string</entry> + <entry>char_length('jose')</entry> </row> <row> - <entry> character_length(string) </entry> - <entry> int4 </entry> - <entry> length of string </entry> - <entry> char_length('jose') </entry> + <entry>character_length(string)</entry> + <entry>int4</entry> + <entry>length of string</entry> + <entry>char_length('jose')</entry> </row> <row> - <entry> lower(string) </entry> - <entry> string </entry> - <entry> convert string to lower case </entry> - <entry> lower('TOM') </entry> + <entry>lower(string)</entry> + <entry>string</entry> + <entry>convert string to lower case</entry> + <entry>lower('TOM')</entry> </row> <row> - <entry> octet_length(string) </entry> - <entry> int4 </entry> - <entry> storage length of string </entry> - <entry> octet_length('jose') </entry> + <entry>octet_length(string)</entry> + <entry>int4</entry> + <entry>storage length of string</entry> + <entry>octet_length('jose')</entry> </row> <row> - <entry> position(string in string) </entry> - <entry> int4 </entry> - <entry> location of specified substring </entry> - <entry> position('o' in 'Tom') </entry> + <entry>position(string in string)</entry> + <entry>int4</entry> + <entry>location of specified substring</entry> + <entry>position('o' in 'Tom')</entry> </row> <row> - <entry> substring(string [from int] [for int]) </entry> - <entry> string </entry> - <entry> extract specified substring </entry> - <entry> substring('Tom' from 2 for 2) </entry> + <entry>substring(string [from int] [for int])</entry> + <entry>string</entry> + <entry>extract specified substring</entry> + <entry>substring('Tom' from 2 for 2)</entry> </row> <row> - <entry> trim([leading|trailing|both] [string] from string) </entry> - <entry> string </entry> - <entry> trim characters from string </entry> - <entry> trim(both 'x' from 'xTomx') </entry> + <entry>trim([leading|trailing|both] [string] from string)</entry> + <entry>string</entry> + <entry>trim characters from string</entry> + <entry>trim(both 'x' from 'xTomx')</entry> </row> <row> - <entry> upper(text) </entry> - <entry> text </entry> - <entry> convert text to upper case </entry> - <entry> upper('tom') </entry> + <entry>upper(text)</entry> + <entry>text</entry> + <entry>convert text to upper case</entry> + <entry>upper('tom')</entry> </row> </tbody> </tgroup> @@ -253,88 +253,88 @@ </thead> <tbody> <row> - <entry> char(text) </entry> - <entry> char </entry> - <entry> convert text to char type </entry> - <entry> char('text string') </entry> + <entry>char(text)</entry> + <entry>char</entry> + <entry>convert text to char type</entry> + <entry>char('text string')</entry> </row> <row> - <entry> char(varchar) </entry> - <entry> char </entry> - <entry> convert varchar to char type </entry> - <entry> char(varchar 'varchar string') </entry> + <entry>char(varchar)</entry> + <entry>char</entry> + <entry>convert varchar to char type</entry> + <entry>char(varchar 'varchar string')</entry> </row> <row> - <entry> initcap(text) </entry> - <entry> text </entry> - <entry> first letter of each word to upper case </entry> - <entry> initcap('thomas') </entry> + <entry>initcap(text)</entry> + <entry>text</entry> + <entry>first letter of each word to upper case</entry> + <entry>initcap('thomas')</entry> </row> <row> - <entry> lpad(text,int,text) </entry> - <entry> text </entry> - <entry> left pad string to specified length </entry> - <entry> lpad('hi',4,'??') </entry> + <entry>lpad(text,int,text)</entry> + <entry>text</entry> + <entry>left pad string to specified length</entry> + <entry>lpad('hi',4,'??')</entry> </row> <row> - <entry> ltrim(text,text) </entry> - <entry> text </entry> - <entry> left trim characters from text </entry> - <entry> ltrim('xxxxtrim','x') </entry> + <entry>ltrim(text,text)</entry> + <entry>text</entry> + <entry>left trim characters from text</entry> + <entry>ltrim('xxxxtrim','x')</entry> </row> <row> - <entry> textpos(text,text) </entry> - <entry> text </entry> - <entry> locate specified substring </entry> - <entry> position('high','ig') </entry> + <entry>textpos(text,text)</entry> + <entry>text</entry> + <entry>locate specified substring</entry> + <entry>position('high','ig')</entry> </row> <row> - <entry> rpad(text,int,text) </entry> - <entry> text </entry> - <entry> right pad string to specified length </entry> - <entry> rpad('hi',4,'x') </entry> + <entry>rpad(text,int,text)</entry> + <entry>text</entry> + <entry>right pad string to specified length</entry> + <entry>rpad('hi',4,'x')</entry> </row> <row> - <entry> rtrim(text,text) </entry> - <entry> text </entry> - <entry> right trim characters from text </entry> - <entry> rtrim('trimxxxx','x') </entry> + <entry>rtrim(text,text)</entry> + <entry>text</entry> + <entry>right trim characters from text</entry> + <entry>rtrim('trimxxxx','x')</entry> </row> <row> - <entry> substr(text,int[,int]) </entry> - <entry> text </entry> - <entry> extract specified substring </entry> - <entry> substr('hi there',3,5) </entry> + <entry>substr(text,int[,int])</entry> + <entry>text</entry> + <entry>extract specified substring</entry> + <entry>substr('hi there',3,5)</entry> </row> <row> - <entry> text(char) </entry> - <entry> text </entry> - <entry> convert char to text type </entry> - <entry> text('char string') </entry> + <entry>text(char)</entry> + <entry>text</entry> + <entry>convert char to text type</entry> + <entry>text('char string')</entry> </row> <row> - <entry> text(varchar) </entry> - <entry> text </entry> - <entry> convert varchar to text type </entry> - <entry> text(varchar 'varchar string') </entry> + <entry>text(varchar)</entry> + <entry>text</entry> + <entry>convert varchar to text type</entry> + <entry>text(varchar 'varchar string')</entry> </row> <row> - <entry> translate(text,from,to) </entry> - <entry> text </entry> - <entry> convert character in string </entry> - <entry> translate('12345', '1', 'a') </entry> + <entry>translate(text,from,to)</entry> + <entry>text</entry> + <entry>convert character in string</entry> + <entry>translate('12345', '1', 'a')</entry> </row> <row> - <entry> varchar(char) </entry> - <entry> varchar </entry> - <entry> convert char to varchar type </entry> - <entry> varchar('char string') </entry> + <entry>varchar(char)</entry> + <entry>varchar</entry> + <entry>convert char to varchar type</entry> + <entry>varchar('char string')</entry> </row> <row> - <entry> varchar(text) </entry> - <entry> varchar </entry> - <entry> convert text to varchar type </entry> - <entry> varchar('text string') </entry> + <entry>varchar(text)</entry> + <entry>varchar</entry> + <entry>convert text to varchar type</entry> + <entry>varchar('text string')</entry> </row> </tbody> </tgroup> @@ -368,82 +368,88 @@ </thead> <tbody> <row> - <entry> abstime(datetime) </entry> - <entry> abstime </entry> - <entry> convert to abstime </entry> - <entry> abstime('now'::datetime) </entry> + <entry>abstime(timestamp)</entry> + <entry>abstime</entry> + <entry>convert to abstime</entry> + <entry>abstime(timestamp 'now')</entry> </row> <row> - <entry> age(datetime,datetime) </entry> - <entry> timespan </entry> - <entry> preserve months and years </entry> - <entry> age('now','1957-06-13'::datetime) </entry> + <entry>age(timestamp)</entry> + <entry>interval</entry> + <entry>preserve months and years</entry> + <entry>age(timestamp '1957-06-13')</entry> </row> <row> - <entry> datetime(abstime) </entry> - <entry> datetime </entry> - <entry> convert to datetime </entry> - <entry> datetime('now'::abstime) </entry> + <entry>age(timestamp,timestamp)</entry> + <entry>interval</entry> + <entry>preserve months and years</entry> + <entry>age('now', timestamp '1957-06-13')</entry> </row> <row> - <entry> datetime(date) </entry> - <entry> datetime </entry> - <entry> convert to datetime </entry> - <entry> datetime('today'::date) </entry> + <entry>timestamp(abstime)</entry> + <entry>timestamp</entry> + <entry>convert to timestamp</entry> + <entry>timestamp(abstime 'now')</entry> </row> <row> - <entry> datetime(date,time) </entry> - <entry> datetime </entry> - <entry> convert to datetime </entry> - <entry> datetime('1998-02-24'::datetime, '23:07'::time); </entry> - </row> - <row> - <entry> date_part(text,datetime) </entry> - <entry> float8 </entry> - <entry> portion of date </entry> - <entry> date_part('dow','now'::datetime) </entry> + <entry>timestamp(date)</entry> + <entry>timestamp</entry> + <entry>convert to timestamp</entry> + <entry>timestamp(date 'today')</entry> </row> <row> - <entry> date_part(text,timespan) </entry> - <entry> float8 </entry> - <entry> portion of time </entry> - <entry> date_part('hour','4 hrs 3 mins'::timespan) </entry> + <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_trunc(text,datetime) </entry> - <entry> datetime </entry> - <entry> truncate date </entry> - <entry> date_trunc('month','now'::abstime) </entry> + <entry>date_part(text,timestamp)</entry> + <entry>float8</entry> + <entry>portion of date</entry> + <entry>date_part('dow',timestamp 'now')</entry> </row> <row> - <entry> isfinite(abstime) </entry> - <entry> bool </entry> - <entry> a finite time? </entry> - <entry> isfinite('now'::abstime) </entry> + <entry>date_part(text,interval)</entry> + <entry>float8</entry> + <entry>portion of time</entry> + <entry>date_part('hour',interval '4 hrs 3 mins')</entry> </row> <row> - <entry> isfinite(datetime) </entry> - <entry> bool </entry> - <entry> a finite time? </entry> - <entry> isfinite('now'::datetime) </entry> + <entry>date_trunc(text,timestamp)</entry> + <entry>timestamp</entry> + <entry>truncate date</entry> + <entry>date_trunc('month',abstime 'now')</entry> </row> <row> - <entry> isfinite(timespan) </entry> - <entry> bool </entry> - <entry> a finite time? </entry> - <entry> isfinite('4 hrs'::timespan) </entry> + <entry>isfinite(abstime)</entry> + <entry>bool</entry> + <entry>a finite time?</entry> + <entry>isfinite(abstime 'now')</entry> </row> <row> - <entry> reltime(timespan) </entry> - <entry> reltime </entry> - <entry> convert to reltime </entry> - <entry> reltime('4 hrs'::timespan) </entry> + <entry>isfinite(timestamp)</entry> + <entry>bool</entry> + <entry>a finite time?</entry> + <entry>isfinite(timestamp 'now')</entry> </row> <row> - <entry> timespan(reltime) </entry> - <entry> timespan </entry> - <entry> convert to timespan </entry> - <entry> timespan('4 hours'::reltime) </entry> + <entry>isfinite(interval)</entry> + <entry>bool</entry> + <entry>a finite time?</entry> + <entry>isfinite(interval '4 hrs')</entry> + </row> + <row> + <entry>reltime(interval)</entry> + <entry>reltime</entry> + <entry>convert to reltime</entry> + <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> </row> </tbody> </tgroup> @@ -459,15 +465,15 @@ `decade', `century', `millenium', `millisecond', and `microsecond'. <function>date_part</function> allows `dow' to return day of week and `epoch' to return seconds since 1970 - (for <type>datetime</type>) - or 'epoch' to return total elapsed seconds (for <type>timespan</type>). + (for <type>timestamp</type>) + or 'epoch' to return total elapsed seconds (for <type>interval</type>). </para> </sect1> <sect1> - <title id="formatting-funcs"> Formatting Functions </title> + <title id="formatting-funcs">Formatting Functions</title> <note> <title>Author</title> @@ -477,11 +483,18 @@ on 2000-01-24. </para> </note> - <para> - Formatting functions provide a powerful set of tools for converting + The <productname>Postgres</productname> + formatting functions provide a powerful set of tools for converting various datetypes (date/time, int, float, numeric) to formatted strings - and reverse convert from formatted strings to original datetypes. + and for converting from formatted strings to specific datetypes. + + <note> + <para> + The second argument for all formatting functions is a template to + be used for the conversion. + </para> + </note> </para> <para> @@ -498,206 +511,190 @@ </thead> <tbody> <row> - <entry> to_char(datetime, text) </entry> - <entry> text </entry> - <entry> convert datetime to string </entry> - <entry> to_char('now'::datetime, 'HH12:MI:SS') </entry> + <entry>to_char(timestamp, text)</entry> + <entry>text</entry> + <entry>convert timestamp to string</entry> + <entry>to_char(timestamp 'now','HH12:MI:SS')</entry> </row> <row> - <entry> to_char(timestamp, text) </entry> - <entry> text </entry> - <entry> convert timestamp to string </entry> - <entry> to_char( now(), 'HH12:MI:SS') </entry> + <entry>to_char(int, text)</entry> + <entry>text</entry> + <entry>convert int4/int8 to string</entry> + <entry>to_char(125, '999')</entry> </row> <row> - <entry> to_char(int, text) </entry> - <entry> text </entry> - <entry> convert int4/int8 to string </entry> - <entry> to_char(125, '999') </entry> + <entry>to_char(float, text)</entry> + <entry>text</entry> + <entry>convert float4/float8 to string</entry> + <entry>to_char(125.8, '999D9')</entry> </row> <row> - <entry> to_char(float, text) </entry> - <entry> text </entry> - <entry> convert float4/float8 to string </entry> - <entry> to_char(125.8, '999D9') </entry> + <entry>to_char(numeric, text)</entry> + <entry>text</entry> + <entry>convert numeric to string</entry> + <entry>to_char(numeric '-125.8', '999D99S')</entry> </row> <row> - <entry> to_char(numeric, text) </entry> - <entry> text </entry> - <entry> convert numeric to string </entry> - <entry> to_char(-125.8, '999D99S') </entry> - </row> - <row> - <entry> to_datetime(text, text) </entry> - <entry> datetime </entry> - <entry> convert string to datetime </entry> - <entry> to_datetime('05 Dec 2000 13', 'DD Mon YYYY HH') </entry> + <entry>to_date(text, text)</entry> + <entry>date</entry> + <entry>convert string to date</entry> + <entry>to_date('05 Dec 2000', 'DD Mon YYYY')</entry> </row> <row> - <entry> to_date(text, text) </entry> - <entry> date </entry> - <entry> convert string to date </entry> - <entry> to_date('05 Dec 2000', 'DD Mon YYYY') </entry> + <entry>to_timestamp(text, text)</entry> + <entry>date</entry> + <entry>convert string to timestamp</entry> + <entry>to_timestamp('05 Dec 2000', 'DD Mon YYYY')</entry> </row> <row> - <entry> to_timestamp(text, text) </entry> - <entry> date </entry> - <entry> convert string to timestamp </entry> - <entry> to_timestamp('05 Dec 2000', 'DD Mon YYYY') </entry> - </row> - <row> - <entry> to_number(text, text) </entry> - <entry> numeric </entry> - <entry> convert string to numeric </entry> - <entry> to_number('12,454.8-', '99G999D9S') </entry> + <entry>to_number(text, text)</entry> + <entry>numeric</entry> + <entry>convert string to numeric</entry> + <entry>to_number('12,454.8-', '99G999D9S')</entry> </row> </tbody> </tgroup> </table> </para> - <para> - For all formatting functions is second argument format-picture. - </para> - <para> <table tocentry="1"> - <title>Format-pictures for date/time to_char() version.</title> + <title>Templates for date/time conversions</title> <tgroup cols="2"> <thead> <row> - <entry>Format-picture</entry> + <entry>Template</entry> <entry>Description</entry> </row> </thead> <tbody> <row> - <entry> HH </entry> - <entry> hour of day (01-12) </entry> + <entry>HH</entry> + <entry>hour of day (01-12)</entry> </row> <row> - <entry> HH12 </entry> - <entry> hour of day (01-12) </entry> + <entry>HH12</entry> + <entry>hour of day (01-12)</entry> </row> <row> - <entry> MI </entry> - <entry> minute (00-59) </entry> + <entry>MI</entry> + <entry>minute (00-59)</entry> </row> <row> - <entry> SS </entry> - <entry> socond (00-59) </entry> + <entry>SS</entry> + <entry>second (00-59)</entry> </row> <row> - <entry> SSSS </entry> - <entry> seconds past midnight (0-86399) </entry> + <entry>SSSS</entry> + <entry>seconds past midnight (0-86399)</entry> </row> <row> - <entry> Y,YYY </entry> - <entry> year (4 and more digits) with comma </entry> + <entry>Y,YYY</entry> + <entry>year (4 and more digits) with comma</entry> </row> <row> - <entry> YYYY </entry> - <entry> year (4 and more digits) </entry> + <entry>YYYY</entry> + <entry>year (4 and more digits)</entry> </row> <row> - <entry> YYY </entry> - <entry> last 3 digits of year </entry> + <entry>YYY</entry> + <entry>last 3 digits of year</entry> </row> <row> - <entry> YY </entry> - <entry> last 2 digits of year </entry> + <entry>YY</entry> + <entry>last 2 digits of year</entry> </row> <row> - <entry> Y </entry> - <entry> last digit of year </entry> + <entry>Y</entry> + <entry>last digit of year</entry> </row> <row> - <entry> MONTH </entry> - <entry> full month name (9-letters) - all characters is upper </entry> + <entry>MONTH</entry> + <entry>full upper case month name (9 chars)</entry> </row> <row> - <entry> Month </entry> - <entry> full month name (9-letters) - first character is upper </entry> + <entry>Month</entry> + <entry>full mixed case month name (9 chars)</entry> </row> <row> - <entry> month </entry> - <entry> full month name (9-letters) - all characters is lower </entry> + <entry>month</entry> + <entry>full lower case month name (9 chars)</entry> </row> <row> - <entry> MON </entry> - <entry> abbreviated month name (3-letters) - all characters is upper </entry> + <entry>MON</entry> + <entry>upper case abbreviated month name (3 chars)</entry> </row> <row> - <entry> Mon </entry> - <entry> abbreviated month name (3-letters) - first character is upper </entry> + <entry>Mon</entry> + <entry>abbreviated mixed case month name (3 chars)</entry> </row> <row> - <entry> mon </entry> - <entry> abbreviated month name (3-letters) - all characters is lower </entry> + <entry>mon</entry> + <entry>abbreviated lower case month name (3 chars)</entry> </row> <row> - <entry> MM </entry> - <entry> month (01-12) </entry> + <entry>MM</entry> + <entry>month (01-12)</entry> </row> <row> - <entry> DAY </entry> - <entry> full day name (9-letters) - all characters is upper </entry> + <entry>DAY</entry> + <entry>full upper case day name (9 chars)</entry> </row> <row> - <entry> Day </entry> - <entry> full day name (9-letters) - first character is upper </entry> + <entry>Day</entry> + <entry>full mixed case day name (9 chars)</entry> </row> <row> - <entry> day </entry> - <entry> full day name (9-letters) - all characters is lower </entry> + <entry>day</entry> + <entry>full lower case day name (9 chars)</entry> </row> <row> - <entry> DY </entry> - <entry> abbreviated day name (3-letters) - all characters is upper </entry> + <entry>DY</entry> + <entry>abbreviated upper case day name (3 chars)</entry> </row> <row> - <entry> Dy </entry> - <entry> abbreviated day name (3-letters) - first character is upper </entry> + <entry>Dy</entry> + <entry>abbreviated mixed case day name (3 chars)</entry> </row> <row> - <entry> dy </entry> - <entry> abbreviated day name (3-letters) - all characters is upper </entry> + <entry>dy</entry> + <entry>abbreviated lower case day name (3 chars)</entry> </row> <row> - <entry> DDD </entry> - <entry> day of year (001-366) </entry> + <entry>DDD</entry> + <entry>day of year (001-366)</entry> </row> <row> - <entry> DD </entry> - <entry> day of month (01-31) </entry> + <entry>DD</entry> + <entry>day of month (01-31)</entry> </row> <row> - <entry> D </entry> - <entry> day of week (1-7; SUN=1) </entry> + <entry>D</entry> + <entry>day of week (1-7; SUN=1)</entry> </row> <row> - <entry> W </entry> - <entry> week of month </entry> + <entry>W</entry> + <entry>week of month</entry> </row> <row> - <entry> WW </entry> - <entry> week number of year </entry> + <entry>WW</entry> + <entry>week number of year</entry> </row> <row> - <entry> CC </entry> - <entry> century (2-digits) </entry> + <entry>CC</entry> + <entry>century (2 digits)</entry> </row> <row> - <entry> J </entry> - <entry> julian day (days since January 1, 4712 BC) </entry> + <entry>J</entry> + <entry>Julian Day (days since January 1, 4712 BC)</entry> </row> <row> - <entry> Q </entry> - <entry> quarter </entry> + <entry>Q</entry> + <entry>quarter</entry> </row> <row> - <entry> RM </entry> - <entry> month in roman numeral (I-XII; I=JAN) </entry> + <entry>RM</entry> + <entry>month in Roman Numerals (I-XII; I=JAN)</entry> </row> </tbody> </tgroup> @@ -705,13 +702,13 @@ </para> <para> - All format-pictures allow use suffixes (postfix / prefix). The suffix is - always valid for a near format-picture. The 'FX' is global prefix only. + All templates allow the use of prefix and suffix modifiers. Modifiers are + always valid for use in templates. The prefix 'FX' is a global modifier only. </para> <para> <table tocentry="1"> - <title>Suffixes for format-pictures for date/time to_char() version.</title> + <title>Suffixes for templates for date/time to_char()</title> <tgroup cols="3"> <thead> <row> @@ -722,31 +719,29 @@ </thead> <tbody> <row> - <entry> FM </entry> - <entry> fill mode - prefix </entry> - <entry> FMMonth </entry> + <entry>FM</entry> + <entry>fill mode prefix</entry> + <entry>FMMonth</entry> </row> <row> - <entry> TH </entry> - <entry> upper ordinal number - postfix </entry> - <entry> DDTH </entry> + <entry>TH</entry> + <entry>upper ordinal number suffix</entry> + <entry>DDTH</entry> </row> <row> - <entry> th </entry> - <entry> lower ordinal number - postfix </entry> - <entry> DDTH </entry> + <entry>th</entry> + <entry>lower ordinal number suffix</entry> + <entry>DDTH</entry> </row> <row> - <entry> FX </entry> - <entry> FX - (Fixed format) global format-picture switch. - The TO_DATETIME / TO_DATE skip blank space if this option is - not use. Must by used as first item in formt-picture. </entry> - <entry> FX Month DD Day </entry> + <entry>FX</entry> + <entry>FiXed format global option (see below)</entry> + <entry>FX Month DD Day</entry> </row> <row> - <entry> SP </entry> - <entry> spell mode (not implement now)</entry> - <entry> DDSP </entry> + <entry>SP</entry> + <entry>spell mode (not yet implemented)</entry> + <entry>DDSP</entry> </row> </tbody> </tgroup> @@ -754,94 +749,116 @@ </para> <para> - '\' - must be use as double \\, example '\\HH\\MI\\SS' + Usage notes: + + <itemizedlist> + <listitem> + <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 + in the template. + </para> + </listitem> + + <listitem> + <para> + '\' - must be use as double \\, example '\\HH\\MI\\SS' + </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\\"'. + </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'. + </para> + </listitem> + </itemizedlist> </para> - <para> - '"' - string between a quotation marks is skipen and not is parsed. - If you want write '"' to output you must use \\", example '\\"YYYY Month\\"'. - </para> - <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'. - </para> - + <para> <table tocentry="1"> - <title>Format-pictures for number (int/float/numeric) to_char() version.</title> + <title>Templates for to_char(<replaceable>numeric</replaceable>)</title> <tgroup cols="2"> <thead> <row> - <entry>Format-picture</entry> + <entry>Template</entry> <entry>Description</entry> </row> </thead> <tbody> <row> - <entry> 9 </entry> - <entry> return value with the specified number of digits, and if digit is - not available use blank space </entry> + <entry>9</entry> + <entry>value with the specified number of digits</entry> </row> <row> - <entry> 0 </entry> - <entry> as 9, but instead blank space use zero </entry> + <entry>0</entry> + <entry>value with leading zeros</entry> </row> <row> - <entry> . (period) </entry> - <entry> decimal point </entry> + <entry>. (period)</entry> + <entry>decimal point</entry> </row> <row> - <entry> , (comma) </entry> - <entry> group (thousand) separator </entry> + <entry>, (comma)</entry> + <entry>group (thousand) separator</entry> </row> <row> - <entry> PR </entry> - <entry> return negative value in angle brackets </entry> + <entry>PR</entry> + <entry>negative value in angle brackets</entry> </row> <row> - <entry> S </entry> - <entry> return negatice value with minus sign (use locales) </entry> + <entry>S</entry> + <entry>negative value with minus sign (use locales)</entry> </row> <row> - <entry> L </entry> - <entry> currency symbol (use locales) </entry> + <entry>L</entry> + <entry>currency symbol (use locales)</entry> </row> <row> - <entry> D </entry> - <entry> decimal point (use locales) </entry> + <entry>D</entry> + <entry>decimal point (use locales)</entry> </row> <row> - <entry> G </entry> - <entry> group separator (use locales) </entry> + <entry>G</entry> + <entry>group separator (use locales)</entry> </row> <row> - <entry> MI </entry> - <entry> return minus sign on specified position (if number < 0) </entry> + <entry>MI</entry> + <entry>minus sign on specified position (if number < 0)</entry> </row> <row> - <entry> PL </entry> - <entry> return plus sign on specified position (if number > 0) - PostgreSQL extension </entry> + <entry>PL</entry> + <entry>plus sign on specified position (if number > 0)</entry> </row> <row> - <entry> SG </entry> - <entry> return plus/minus sign on specified position - PostgreSQL extension </entry> + <entry>SG</entry> + <entry>plus/minus sign on specified position</entry> </row> <row> - <entry> RN </entry> - <entry> return number as roman number (number must be between 1 and 3999) </entry> + <entry>RN</entry> + <entry>roman numeral (input between 1 and 3999)</entry> </row> <row> - <entry> TH or th </entry> - <entry> convert number to ordinal number (not convert numbers under zero and decimal numbers) - PostgreSQL extension </entry> + <entry>TH or th</entry> + <entry>convert to ordinal number</entry> </row> <row> - <entry> V </entry> - <entry> arg1 * (10 ^ n); - return a value multiplied by 10^n (where 'n' is number of '9's after the 'V'). - The to_char() not support use 'V' and decimal poin together, example "99.9V99". </entry> + <entry>V</entry> + <entry>Shift <replaceable>n</replaceable> digits (see + notes)</entry> </row> <row> - <entry> EEEE </entry> - <entry> science numbers. Now not supported. </entry> + <entry>EEEE</entry> + <entry>science numbers. Now not supported.</entry> </row> </tbody> </tgroup> @@ -849,16 +866,65 @@ </para> <para> - Note: A sign formatted via 'SG', 'PL' or 'MI' is not anchor in number; - to_char(-12, 'S9999') produce: <ProgramListing> ' -12' </ProgramListing>, - but to_char(-12, 'MI9999') produce: <ProgramListing> '- 12' </ProgramListing>. - The Oracle not allow use 'MI' ahead of '9', in the Oracle must be it always - after '9'. + Usage notes: + + <itemizedlist> + <listitem> + <para> + A sign formatted using 'SG', 'PL' or 'MI' is not an anchor in + the number; for example, + to_char(-12, 'S9999') produces <literal>' -12'</literal>, + but to_char(-12, 'MI9999') produces <literal>'- 12'</literal>. + The Oracle implementation does not allow the use of + <literal>MI</literal> ahead of <literal>9</literal>, but rather + requires that <literal>9</literal> preceeds + <literal>MI</literal>. + </para> + </listitem> + + <listitem> + <para> + <literal>PL</literal>, <literal>SG</literal>, and + <literal>TH</literal> are <productname>Postgres</productname> + extensions. + </para> + </listitem> + + <listitem> + <para> + <entry>9</entry> + <entry>value with the specified number of digits, and if digit is + not available use blank space</entry> + </row> + </para> + </listitem> + + <listitem> + <para> + <literal>TH</literal> does not convert values less than zero + and does not convert decimal numbers. <literal>TH</literal> is + a <productname>Postgres</productname> extension. + </para> + </listitem> + + <listitem> + <para> + <literal>V</literal> effectively + multiplies the input values by + <literal>10^<replaceable>n</replaceable></literal>, where + <replaceable>n</replaceable> is the number of digits following + <literal>V</literal>. + <function>to_char</function> does not support the use of + <literal>V</literal> combined with a decimal point + (e.g. "99.9V99" is not allowed). + </para> + </listitem> + </itemizedlist> </para> <para> <table tocentry="1"> - <title> The to_char() examples. </title> + <title><function>to_char</function> Examples</title> <tgroup cols="2"> <thead> <row> @@ -868,146 +934,144 @@ </thead> <tbody> <row> - <entry> to_char(now(), 'Day, HH12:MI:SS') </entry> - <entry><ProgramListing> 'Tuesday , 05:39:18' </ProgramListing></entry> - </row> + <entry>to_char(now(),'Day, HH12:MI:SS')</entry> + <entry><literal>'Tuesday , 05:39:18'</literal></entry> + </row> <row> - <entry> to_char(now(), 'FMDay, HH12:MI:SS') </entry> - <entry><ProgramListing> 'Tuesday, 05:39:18' </ProgramListing></entry> + <entry>to_char(now(),'FMDay, HH12:MI:SS')</entry> + <entry><literal>'Tuesday, 05:39:18'</literal></entry> </row> <row> - <entry> to_char( -0.1, '99.99') </entry> - <entry><ProgramListing> ' -.10' </ProgramListing></entry> + <entry>to_char(-0.1,'99.99')</entry> + <entry><literal>' -.10'</literal></entry> </row> <row> - <entry> to_char( -0.1, 'FM9.99') </entry> - <entry><ProgramListing> '-.1' </ProgramListing></entry> + <entry>to_char(-0.1,'FM9.99')</entry> + <entry><literal>'-.1'</literal></entry> </row> <row> - <entry> to_char( 0.1, '0.9') </entry> - <entry><ProgramListing> ' 0.1' </ProgramListing></entry> + <entry>to_char(0.1,'0.9')</entry> + <entry><literal>' 0.1'</literal></entry> </row> <row> - <entry> to_char( 12, '9990999.9') </entry> - <entry><ProgramListing> ' 0012.0' </ProgramListing></entry> + <entry>to_char(12,'9990999.9')</entry> + <entry><literal>' 0012.0'</literal></entry> </row> <row> - <entry> to_char( 12, 'FM9990999.9') </entry> - <entry><ProgramListing> '0012' </ProgramListing></entry> + <entry>to_char(12,'FM9990999.9')</entry> + <entry><literal>'0012'</literal></entry> </row> <row> - <entry> to_char( 485, '999') </entry> - <entry><ProgramListing> ' 485' </ProgramListing></entry> + <entry>to_char(485,'999')</entry> + <entry><literal>' 485'</literal></entry> </row> <row> - <entry> to_char( -485, '999') </entry> - <entry><ProgramListing> '-485' </ProgramListing></entry> + <entry>to_char(-485,'999')</entry> + <entry><literal>'-485'</literal></entry> </row> <row> - <entry> to_char( 485, '9 9 9') </entry> - <entry><ProgramListing> ' 4 8 5' </ProgramListing></entry> + <entry>to_char(485,'9 9 9')</entry> + <entry><literal>' 4 8 5'</literal></entry> </row> <row> - <entry> to_char( 1485, '9,999') </entry> - <entry><ProgramListing> ' 1,485' </ProgramListing></entry> + <entry>to_char(1485,'9,999')</entry> + <entry><literal>' 1,485'</literal></entry> </row> <row> - <entry> to_char( 1485, '9G999') </entry> - <entry><ProgramListing> ' 1 485' </ProgramListing></entry> + <entry>to_char(1485,'9G999')</entry> + <entry><literal>' 1 485'</literal></entry> </row> <row> - <entry> to_char( 148.5, '999.999') </entry> - <entry><ProgramListing> ' 148.500' </ProgramListing></entry> + <entry>to_char(148.5,'999.999')</entry> + <entry><literal>' 148.500'</literal></entry> </row> <row> - <entry> to_char( 148.5, '999D999') </entry> - <entry><ProgramListing> ' 148,500' </ProgramListing></entry> + <entry>to_char(148.5,'999D999')</entry> + <entry><literal>' 148,500'</literal></entry> </row> <row> - <entry> to_char( 3148.5,'9G999D999') </entry> - <entry><ProgramListing> ' 3 148,500' </ProgramListing></entry> + <entry>to_char(3148.5,'9G999D999')</entry> + <entry><literal>' 3 148,500'</literal></entry> </row> <row> - <entry> to_char( -485, '999S') </entry> - <entry><ProgramListing> '485-' </ProgramListing></entry> + <entry>to_char(-485,'999S')</entry> + <entry><literal>'485-'</literal></entry> </row> <row> - <entry> to_char( -485, '999MI') </entry> - <entry><ProgramListing> '485-' </ProgramListing></entry> + <entry>to_char(-485,'999MI')</entry> + <entry><literal>'485-'</literal></entry> </row> <row> - <entry> to_char( 485, '999MI') </entry> - <entry><ProgramListing> '485' </ProgramListing></entry> + <entry>to_char(485,'999MI')</entry> + <entry><literal>'485'</literal></entry> </row> <row> - <entry> to_char( 485, 'PL999') </entry> - <entry><ProgramListing> '+485' </ProgramListing></entry> + <entry>to_char(485,'PL999')</entry> + <entry><literal>'+485'</literal></entry> </row> <row> - <entry> to_char( 485, 'SG999') </entry> - <entry><ProgramListing> '+485' </ProgramListing></entry> + <entry>to_char(485,'SG999')</entry> + <entry><literal>'+485'</literal></entry> </row> <row> - <entry> to_char( -485, 'SG999') </entry> - <entry><ProgramListing> '-485' </ProgramListing></entry> + <entry>to_char(-485,'SG999')</entry> + <entry><literal>'-485'</literal></entry> </row> <row> - <entry> to_char( -485, '9SG99') </entry> - <entry><ProgramListing> '4-85' </ProgramListing></entry> + <entry>to_char(-485,'9SG99')</entry> + <entry><literal>'4-85'</literal></entry> </row> <row> - <entry> to_char( -485, '999PR') </entry> - <entry><ProgramListing> '<485>' </ProgramListing></entry> + <entry>to_char(-485,'999PR')</entry> + <entry><literal>'<485>'</literal></entry> </row> <row> - <entry> to_char( 485, 'L999') </entry> - <entry><ProgramListing> 'DM 485' </ProgramListing></entry> + <entry>to_char(485,'L999')</entry> + <entry><literal>'DM 485</literal></entry> </row> <row> - <entry> to_char( 485, 'RN') </entry> - <entry><ProgramListing> ' CDLXXXV' </ProgramListing></entry> + <entry>to_char(485,'RN')</entry> + <entry><literal>' CDLXXXV'</literal></entry> </row> <row> - <entry> to_char( 485, 'FMRN') </entry> - <entry><ProgramListing> 'CDLXXXV' </ProgramListing></entry> + <entry>to_char(485,'FMRN')</entry> + <entry><literal>'CDLXXXV'</literal></entry> </row> <row> - <entry> to_char( 5.2, 'FMRN') </entry> - <entry><ProgramListing> 'V' </ProgramListing></entry> + <entry>to_char(5.2,'FMRN')</entry> + <entry><literal>V</literal></entry> </row> <row> - <entry> to_char( 482, '999th') </entry> - <entry><ProgramListing> ' 482nd' </ProgramListing></entry> + <entry>to_char(482,'999th')</entry> + <entry><literal>' 482nd'</literal></entry> </row> <row> - <entry> to_char( 485, '"Good number:"999') </entry> - <entry><ProgramListing> 'Good number: 485' </ProgramListing></entry> + <entry>to_char(485, '"Good number:"999')</entry> + <entry><literal>'Good number: 485'</literal></entry> </row> <row> - <entry> to_char( 485.8, '"Pre-decimal:"999" Post-decimal:" .999') </entry> - <entry><ProgramListing> 'Pre-decimal: 485 Post-decimal: .800' </ProgramListing></entry> + <entry>to_char(485.8,'"Pre-decimal:"999" Post-decimal:" .999')</entry> + <entry><literal>'Pre-decimal: 485 Post-decimal: .800'</literal></entry> </row> <row> - <entry> to_char( 12, '99V999') </entry> - <entry><ProgramListing> ' 12000' </ProgramListing></entry> + <entry>to_char(12,'99V999')</entry> + <entry><literal>' 12000'</literal></entry> </row> <row> - <entry> to_char( 12.4, '99V999') </entry> - <entry><ProgramListing> ' 12400' </ProgramListing></entry> + <entry>to_char(12.4,'99V999')</entry> + <entry><literal>' 12400'</literal></entry> </row> <row> - <entry> to_char( 12.45, '99V9') </entry> - <entry><ProgramListing> ' 125' </ProgramListing></entry> + <entry>to_char(12.45, '99V9')</entry> + <entry><literal>' 125'</literal></entry> </row> </tbody> </tgroup> </table> </para> - </sect1> - <sect1> <title>Geometric Functions</title> @@ -1030,106 +1094,97 @@ </thead> <tbody> <row> - <entry> area(box) </entry> - <entry> float8 </entry> - <entry> area of box </entry> - <entry> area('((0,0),(1,1))'::box) </entry> + <entry>area(object)</entry> + <entry>float8</entry> + <entry>area of circle, ...</entry> + <entry>area(box '((0,0),(1,1))')</entry> </row> <row> - <entry> area(circle) </entry> - <entry> float8 </entry> - <entry> area of circle </entry> - <entry> area('((0,0),2.0)'::circle) </entry> + <entry>box(box,box)</entry> + <entry>box</entry> + <entry>boxes to intersection box</entry> + <entry>box(box '((0,0),(1,1))',box '((0.5,0.5),(2,2))')</entry> </row> <row> - <entry> box(box,box) </entry> - <entry> box </entry> - <entry> boxes to intersection box </entry> - <entry> box('((0,0),(1,1))','((0.5,0.5),(2,2))') </entry> + <entry>center(object)</entry> + <entry>point</entry> + <entry>center of circle, ...</entry> + <entry>center(box '((0,0),(1,2))')</entry> </row> <row> - <entry> center(box) </entry> - <entry> point </entry> - <entry> center of object </entry> - <entry> center('((0,0),(1,2))'::box) </entry> + <entry>diameter(circle)</entry> + <entry>float8</entry> + <entry>diameter of circle</entry> + <entry>diameter(circle '((0,0),2.0)')</entry> </row> <row> - <entry> center(circle) </entry> - <entry> point </entry> - <entry> center of object </entry> - <entry> center('((0,0),2.0)'::circle) </entry> + <entry>height(box)</entry> + <entry>float8</entry> + <entry>vertical size of box</entry> + <entry>height(box '((0,0),(1,1))')</entry> </row> <row> - <entry> diameter(circle) </entry> - <entry> float8 </entry> - <entry> diameter of circle </entry> - <entry> diameter('((0,0),2.0)'::circle) </entry> + <entry>isclosed(path)</entry> + <entry>bool</entry> + <entry>a closed path?</entry> + <entry>isclosed(path '((0,0),(1,1),(2,0))')</entry> </row> <row> - <entry> height(box) </entry> - <entry> float8 </entry> - <entry> vertical size of box </entry> - <entry> height('((0,0),(1,1))'::box) </entry> + <entry>isopen(path)</entry> + <entry>bool</entry> + <entry>an open path?</entry> + <entry>isopen(path '[(0,0),(1,1),(2,0)]')</entry> </row> <row> - <entry> isclosed(path) </entry> - <entry> bool </entry> - <entry> a closed path? </entry> - <entry> isclosed('((0,0),(1,1),(2,0))'::path) </entry> + <entry>length(object)</entry> + <entry>float8</entry> + <entry>length of line segment, ...</entry> + <entry>length(path '((-1,0),(1,0))')</entry> </row> <row> - <entry> isopen(path) </entry> - <entry> bool </entry> - <entry> an open path? </entry> - <entry> isopen('[(0,0),(1,1),(2,0)]'::path) </entry> + <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> length(lseg) </entry> - <entry> float8 </entry> - <entry> length of line segment </entry> - <entry> length('((-1,0),(1,0))'::lseg) </entry> + <entry>pclose(path)</entry> + <entry>path</entry> + <entry>convert path to closed</entry> + <entry>popen(path '[(0,0),(1,1),(2,0)]')</entry> + </row> +<!-- +Not defined by this name. Implements the intersection operator '#' + <row> + <entry>point(lseg,lseg)</entry> + <entry>point</entry> + <entry>intersection</entry> + <entry>point(lseg '((-1,0),(1,0))',lseg '((-2,-2),(2,2))')</entry> + </row> +--> + <row> + <entry>npoint(path)</entry> + <entry>int4</entry> + <entry>number of points</entry> + <entry>npoints(path '[(0,0),(1,1),(2,0)]')</entry> </row> <row> - <entry> length(path) </entry> - <entry> float8 </entry> - <entry> length of path </entry> - <entry> length('((0,0),(1,1),(2,0))'::path) </entry> + <entry>popen(path)</entry> + <entry>path</entry> + <entry>convert path to open path</entry> + <entry>popen(path '((0,0),(1,1),(2,0))')</entry> </row> <row> - <entry> pclose(path) </entry> - <entry> path </entry> - <entry> convert path to closed </entry> - <entry> popen('[(0,0),(1,1),(2,0)]'::path) </entry> + <entry>radius(circle)</entry> + <entry>float8</entry> + <entry>radius of circle</entry> + <entry>radius(circle '((0,0),2.0)')</entry> </row> <row> - <entry> point(lseg,lseg) </entry> - <entry> point </entry> - <entry> intersection </entry> - <entry> point('((-1,0),(1,0))'::lseg,'((-2,-2),(2,2))'::lseg) </entry> - </row> - <row> - <entry> points(path) </entry> - <entry> int4 </entry> - <entry> number of points </entry> - <entry> points('[(0,0),(1,1),(2,0)]'::path) </entry> - </row> - <row> - <entry> popen(path) </entry> - <entry> path </entry> - <entry> convert path to open </entry> - <entry> popen('((0,0),(1,1),(2,0))'::path) </entry> - </row> - <row> - <entry> radius(circle) </entry> - <entry> float8 </entry> - <entry> radius of circle </entry> - <entry> radius('((0,0),2.0)'::circle) </entry> - </row> - <row> - <entry> width(box) </entry> - <entry> float8 </entry> - <entry> horizontal size </entry> - <entry> width('((0,0),(1,1))'::box) </entry> + <entry>width(box)</entry> + <entry>float8</entry> + <entry>horizontal size</entry> + <entry>width(box '((0,0),(1,1))')</entry> </row> </tbody> </tgroup> @@ -1150,94 +1205,94 @@ </thead> <tbody> <row> - <entry> box(circle) </entry> - <entry> box </entry> - <entry> convert circle to box </entry> - <entry> box('((0,0),2.0)'::circle) </entry> + <entry>box(circle)</entry> + <entry>box</entry> + <entry>convert 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> box('(0,0)'::point,'(1,1)'::point) </entry> + <entry>box(point,point)</entry> + <entry>box</entry> + <entry>convert 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> box('((0,0),(1,1),(2,0))'::polygon) </entry> + <entry>box(polygon)</entry> + <entry>box</entry> + <entry>convert 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> circle('((0,0),(1,1))'::box) </entry> + <entry>circle(box)</entry> + <entry>circle</entry> + <entry>convert 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> circle('(0,0)'::point,2.0) </entry> + <entry>circle(point,float8)</entry> + <entry>circle</entry> + <entry>convert 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> lseg('((-1,0),(1,0))'::box) </entry> + <entry>lseg(box)</entry> + <entry>lseg</entry> + <entry>convert 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> lseg('(-1,0)'::point,'(1,0)'::point) </entry> + <entry>lseg(point,point)</entry> + <entry>lseg</entry> + <entry>convert 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> path('((0,0),(1,1),(2,0))'::polygon) </entry> + <entry>path(polygon)</entry> + <entry>point</entry> + <entry>convert 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> point('((0,0),2.0)'::circle) </entry> + <entry>point(circle)</entry> + <entry>point</entry> + <entry>convert to point (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> point('((-1,0),(1,0))'::lseg, '((-2,-2),(2,2))'::lseg) </entry> + <entry>point(lseg,lseg)</entry> + <entry>point</entry> + <entry>convert to point (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> point('((0,0),(1,1),(2,0))'::polygon) </entry> + <entry>point(polygon)</entry> + <entry>point</entry> + <entry>center of polygon</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> polygon('((0,0),(1,1))'::box) </entry> + <entry>polygon(box)</entry> + <entry>polygon</entry> + <entry>convert to polygon with 12 points</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> polygon('((0,0),2.0)'::circle) </entry> + <entry>polygon(circle)</entry> + <entry>polygon</entry> + <entry>convert to 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> polygon(12,'((0,0),2.0)'::circle) </entry> + <entry>polygon(<replaceable class="parameter">npts</replaceable>,circle)</entry> + <entry>polygon</entry> + <entry>convert to <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> polygon('((0,0),(1,1),(2,0))'::path) </entry> + <entry>polygon(path)</entry> + <entry>polygon</entry> + <entry>convert to polygon</entry> + <entry>polygon('((0,0),(1,1),(2,0))'::path)</entry> </row> </tbody> </tgroup> @@ -1258,28 +1313,28 @@ </thead> <tbody> <row> - <entry> isoldpath(path) </entry> - <entry> path </entry> - <entry> test path for pre-v6.1 form </entry> - <entry> isoldpath('(1,3,0,0,1,1,2,0)'::path) </entry> + <entry>isoldpath(path)</entry> + <entry>path</entry> + <entry>test path for pre-v6.1 form</entry> + <entry>isoldpath('(1,3,0,0,1,1,2,0)'::path)</entry> </row> <row> - <entry> revertpoly(polygon) </entry> - <entry> polygon </entry> - <entry> convert pre-v6.1 polygon </entry> - <entry> revertpoly('((0,0),(1,1),(2,0))'::polygon) </entry> + <entry>revertpoly(polygon)</entry> + <entry>polygon</entry> + <entry>convert pre-v6.1 polygon</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> upgradepath('(1,3,0,0,1,1,2,0)'::path) </entry> + <entry>upgradepath(path)</entry> + <entry>path</entry> + <entry>convert pre-v6.1 path</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> upgradepoly('(0,1,2,0,1,0)'::polygon) </entry> + <entry>upgradepoly(polygon)</entry> + <entry>polygon</entry> + <entry>convert pre-v6.1 polygon</entry> + <entry>upgradepoly('(0,1,2,0,1,0)'::polygon)</entry> </row> </tbody> </tgroup> @@ -1304,40 +1359,40 @@ </thead> <tbody> <row> - <entry> broadcast(cidr) </entry> - <entry> text </entry> - <entry> construct broadcast address as text </entry> - <entry> broadcast('192.168.1.5/24') </entry> + <entry>broadcast(cidr)</entry> + <entry>text</entry> + <entry>construct broadcast address as text</entry> + <entry>broadcast('192.168.1.5/24')</entry> </row> <row> - <entry> broadcast(inet) </entry> - <entry> text </entry> - <entry> construct broadcast address as text </entry> - <entry> broadcast('192.168.1.5/24') </entry> + <entry>broadcast(inet)</entry> + <entry>text</entry> + <entry>construct broadcast address as text</entry> + <entry>broadcast('192.168.1.5/24')</entry> </row> <row> - <entry> host(inet) </entry> - <entry> text </entry> - <entry> extract host address as text </entry> - <entry> host('192.168.1.5/24') </entry> + <entry>host(inet)</entry> + <entry>text</entry> + <entry>extract host address as text</entry> + <entry>host('192.168.1.5/24')</entry> </row> <row> - <entry> masklen(cidr) </entry> - <entry> int4 </entry> - <entry> calculate netmask length </entry> - <entry> masklen('192.168.1.5/24') </entry> + <entry>masklen(cidr)</entry> + <entry>int4</entry> + <entry>calculate netmask length</entry> + <entry>masklen('192.168.1.5/24')</entry> </row> <row> - <entry> masklen(inet) </entry> - <entry> int4 </entry> - <entry> calculate netmask length </entry> - <entry> masklen('192.168.1.5/24') </entry> + <entry>masklen(inet)</entry> + <entry>int4</entry> + <entry>calculate netmask length</entry> + <entry>masklen('192.168.1.5/24')</entry> </row> <row> - <entry> netmask(inet) </entry> - <entry> text </entry> - <entry> construct netmask as text </entry> - <entry> netmask('192.168.1.5/24') </entry> + <entry>netmask(inet)</entry> + <entry>text</entry> + <entry>construct netmask as text</entry> + <entry>netmask('192.168.1.5/24')</entry> </row> </tbody> </tgroup> diff --git a/doc/src/sgml/odbc.sgml b/doc/src/sgml/odbc.sgml index 82b6bc79e2..7edc130dc5 100644 --- a/doc/src/sgml/odbc.sgml +++ b/doc/src/sgml/odbc.sgml @@ -1,592 +1,597 @@ -<Chapter Id="odbc"> -<DocInfo> -<AuthorGroup> -<Author> -<FirstName>Tim</FirstName> -<Surname>Goeke</Surname> -</Author> -<Author> -<FirstName>Thomas</FirstName> -<Surname>Lockhart</Surname> -</Author> -</AuthorGroup> -<Date>1998-10-21</Date> -</DocInfo> + <chapter id="odbc"> + <docinfo> + <authorgroup> + <author> + <firstname>Tim</firstname> + <surname>Goeke</surname> + </author> + <author> + <firstname>Thomas</firstname> + <surname>Lockhart</surname> + </author> + </authorgroup> + <date>1998-10-21</date> + </docinfo> -<Title>ODBC Interface</Title> + <title>ODBC Interface</title> -<Note> -<Para> -Background information originally by - <ULink url="mailto:tgoeke@xpressway.com">Tim Goeke</ULink> -</Para> -</Note> + <note> + <para> + Background information originally by + <ulink url="mailto:tgoeke@xpressway.com">Tim Goeke</ulink> + </para> + </note> -<Para> -<acronym>ODBC</acronym> (Open Database Connectivity) is an abstract -<acronym>API</acronym> -which allows you to write applications which can interoperate -with various <acronym>RDBMS</acronym> servers. -<acronym>ODBC</acronym> provides a product-neutral interface -between frontend applications and database servers, -allowing a user or developer to write applications which are -transportable between servers from different manufacturers.. -</Para> + <para> + <acronym>ODBC</acronym> (Open Database Connectivity) is an abstract + <acronym>API</acronym> + which allows you to write applications which can interoperate + with various <acronym>RDBMS</acronym> servers. + <acronym>ODBC</acronym> provides a product-neutral interface + between frontend applications and database servers, + allowing a user or developer to write applications which are + transportable between servers from different manufacturers.. + </para> -<Sect1> -<Title>Background</Title> + <sect1> + <title>Background</title> -<Para> -The <acronym>ODBC</acronym> <acronym>API</acronym> matches up -on the backend to an <acronym>ODBC</acronym>-compatible data source. -This could be anything from a text file to an Oracle or -<productname>Postgres</productname> <acronym>RDBMS</acronym>. -</Para> + <para> + The <acronym>ODBC</acronym> <acronym>API</acronym> matches up + on the backend to an <acronym>ODBC</acronym>-compatible data source. + This could be anything from a text file to an Oracle or + <productname>Postgres</productname> <acronym>RDBMS</acronym>. + </para> -<Para> -The backend access come from <acronym>ODBC</acronym> drivers, -or vendor specifc drivers that -allow data access. <productname>psqlODBC</productname> is such a driver, - along with others that are -available, such as the OpenLink <acronym>ODBC</acronym> drivers. -</Para> + <para> + The backend access come from <acronym>ODBC</acronym> drivers, + or vendor specifc drivers that + allow data access. <productname>psqlODBC</productname> is such a driver, + along with others that are + available, such as the OpenLink <acronym>ODBC</acronym> drivers. + </para> -<Para> -Once you write an <acronym>ODBC</acronym> application, -you <emphasis>should</emphasis> be able to connect to <emphasis>any</emphasis> -back end database, regardless of the vendor, as long as the database schema -is the same. -</Para> + <para> + Once you write an <acronym>ODBC</acronym> application, + you <emphasis>should</emphasis> be able to connect to <emphasis>any</emphasis> + back end database, regardless of the vendor, as long as the database schema + is the same. + </para> -<Para> -For example. you could have <productname>MS SQL Server</productname> - and <productname>Postgres</productname> servers which have -exactly the same data. Using <acronym>ODBC</acronym>, -your Windows application would make exactly the -same calls and the back end data source would look the same (to the Windows -app). -</Para> - -<para> -<ulink url="http://www.insightdist.com/">Insight Distributors</ulink> -provides active and ongoing -support for the core <productname>psqlODBC</productname> distribution. -They provide a -<ulink url="http://www.insightdist.com/psqlodbc/"><acronym>FAQ</acronym></ulink>, - ongoing development on the code base, and actively participate on the -<ulink url="mailto:interfaces@postgresql.org">interfaces mailing list</ulink>. -</Para> -</sect1> - -<sect1> -<title><productname>Windows</productname> Applications</title> - -<Para> -In the real world, differences in drivers and the level of -<acronym>ODBC</acronym> support -lessens the potential of <acronym>ODBC</acronym>: - -<ItemizedList Mark="bullet" Spacing="compact"> -<ListItem> -<Para> -Access, Delphi, and Visual Basic all support <acronym>ODBC</acronym> directly. -</Para> -</listitem> -<ListItem> -<Para> -Under C++, such as Visual C++, -you can use the C++ <acronym>ODBC</acronym> <acronym>API</acronym>. -</Para> -</listitem> - -<ListItem> -<Para> -In Visual C++, you can use the CRecordSet class, which wraps the -<acronym>ODBC</acronym> <acronym>API</acronym> -set within an MFC 4.2 class. This is the easiest route if you are doing -Windows C++ development under Windows NT. -</Para> -</listitem> -</ItemizedList> -</Para> - -<sect2> -<title>Writing Applications</title> - -<Para> -<quote> -If I write an application for <productname>Postgres</productname> -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> -</para> -<Para> -The <acronym>ODBC</acronym> <acronym>API</acronym> -is the way to go. -For <productname>Visual C++</productname> coding you can find out more at -Microsoft's web site or in your <productname>VC++</productname> docs. -</Para> - -<Para> -Visual Basic and the other RAD tools have Recordset objects -that use <acronym>ODBC</acronym> -directly to access data. Using the data-aware controls, you can quickly -link to the <acronym>ODBC</acronym> back end database -(<Emphasis>very</Emphasis> quickly). -</Para> - -<Para> -Playing around with MS Access will help you sort this out. Try using -<literal>File->Get External Data</literal>. -</Para> - -<Tip> -<Para> -You'll have to set up a DSN first. -</Para> -</Tip> + <para> + For example. you could have <productname>MS SQL Server</productname> + and <productname>Postgres</productname> servers which have + exactly the same data. Using <acronym>ODBC</acronym>, + your Windows application would make exactly the + same calls and the back end data source would look the same (to the Windows + app). + </para> <!-- -<Para> -<Tip> -<Para> -The <productname>Postgres</productname> datetime type will break MS Access. -</Para> -</Tip> + <para> + <ulink url="http://www.insightdist.com/">Insight Distributors</ulink> + provides active and ongoing + support for the core <productname>psqlODBC</productname> distribution. + They provide a + <ulink url="http://www.insightdist.com/psqlodbc/"><acronym>FAQ</acronym></ulink>, + ongoing development on the code base, and actively participate on the + <ulink url="mailto:interfaces@postgresql.org">interfaces mailing list</ulink>. + </para> --> -</sect2> -</sect1> + </sect1> -<sect1> -<title>Unix Installation</title> + <sect1> + <title><productname>Windows</productname> Applications</title> -<para> -<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 -using the <productname>psqlODBC</productname> -driver contained in the <productname>Postgres</productname> distribution. -</Para> + <para> + In the real world, differences in drivers and the level of + <acronym>ODBC</acronym> support + lessens the potential of <acronym>ODBC</acronym>: -<sect2> -<title>Building the Driver</title> + <itemizedlist spacing="compact" mark="bullet"> + <listitem> + <para> + Access, Delphi, and Visual Basic all support <acronym>ODBC</acronym> directly. + </para> + </listitem> + <listitem> + <para> + Under C++, such as Visual C++, + you can use the C++ <acronym>ODBC</acronym> <acronym>API</acronym>. + </para> + </listitem> -<para> -The first thing -to note about the <productname>psqlODBC</productname> driver - (or any <acronym>ODBC</acronym> driver) is that there must -exist a driver manager on the system where - the <acronym>ODBC</acronym> driver is to be -used. There exists a freeware <acronym>ODBC</acronym> driver for Unix - called <productname>iodbc</productname> which -can be obtained from various locations on the Net, including at -<ulink url="http://www.as220.org/FreeODBC/iodbc-2.12.shar.Z">AS200</ulink>. -Instructions for installing <productname>iodbc</productname> - are beyond the scope of this -document, but there is a <filename>README</filename> - that can be found inside the <productname>iodbc</productname> compressed -.shar file that should explain how to get it up and running. -</Para> + <listitem> + <para> + In Visual C++, you can use the CRecordSet class, which wraps the + <acronym>ODBC</acronym> <acronym>API</acronym> + set within an MFC 4.2 class. This is the easiest route if you are doing + Windows C++ development under Windows NT. + </para> + </listitem> + </itemizedlist> + </para> -<para> -Having said that, any driver manager that you can find for your platform -should support the <productname>psqlODBC</productname> driver - or any <acronym>ODBC</acronym> driver. -</Para> + <sect2> + <title>Writing Applications</title> -<para> -The Unix configuration files for <productname>psqlODBC</productname> - have recently been extensively -reworked to allow for easy building on supported platforms as -well as to allow for support of other Unix platforms in the future. -The new configuration and build files for the driver should make it -a simple process to build the driver on the supported platforms. Currently -these include Linux and FreeBSD but we are hoping other users will -contribute the necessary information to quickly expand the number of -platforms for which the driver can be built. -</Para> + <para> + <quote> + If I write an application for <productname>Postgres</productname> + 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> + </para> + <para> + The <acronym>ODBC</acronym> <acronym>API</acronym> + is the way to go. + For <productname>Visual C++</productname> coding you can find out more at + Microsoft's web site or in your <productname>VC++</productname> docs. + </para> -<para> -There are actually two separate methods to build the driver depending on -how you received it and these differences come down to only where and how to -run <application>configure</application> and <application>make</application>. -The driver can be built in a standalone, client-only installation, or can be -built as a part of the main <productname>Postgres</productname> distribution. -The standalone installation is convenient if you have <acronym>ODBC</acronym> -client applications on multiple, heterogeneous platforms. The integrated -installation is convenient when the target client is the same as the -server, or when the client and server have similar runtime configurations. -</Para> + <para> + Visual Basic and the other RAD tools have Recordset objects + that use <acronym>ODBC</acronym> + directly to access data. Using the data-aware controls, you can quickly + link to the <acronym>ODBC</acronym> back end database + (<emphasis>very</emphasis> quickly). + </para> -<para> -Specifically if you have received the <productname>psqlODBC</productname> - driver as part of the <productname>Postgres</productname> distribution - (from now on referred to as an "integrated" build) then you will -configure and make the <acronym>ODBC</acronym> driver - from the top level source directory -of the <productname>Postgres</productname> distribution - along with the rest of its libraries. -If you received the driver as a standalone package than you will run -configure and make from the directory in which you unpacked the -driver source. -</Para> + <para> + Playing around with MS Access will help you sort this out. Try using + <literal>File->Get External Data</literal>. + </para> -<procedure> -<title>Integrated Installation</title> + <tip> + <para> + You'll have to set up a DSN first. + </para> + </tip> -<para> -This installation procedure is appropriate for an integrated installation. -</Para> + <!-- + <Para> + <Tip> + <Para> + The <productname>Postgres</productname> datetime type will break MS Access. + </Para> + </Tip> + --> + </sect2> + </sect1> -<step performance="required"> -<para> -Specify the <option>--with-odbc</option> -command-line argument for <application>src/configure</application>: + <sect1> + <title>Unix Installation</title> -<programlisting> -% ./configure --with-odbc -% make -</programlisting> -</Para> -</step> -<step performance="required"> -<para> -Rebuild the <productname>Postgres</productname> distribution: + <para> + <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 + using the <productname>psqlODBC</productname> + driver contained in the <productname>Postgres</productname> distribution. + </para> -<programlisting> -% make install -</programlisting> -</Para> -</step> -</procedure> + <sect2> + <title>Building the Driver</title> -<para> -Once configured, the <acronym>ODBC</acronym> driver will be built and installed -into the areas defined for the other components of the -<productname>Postgres</productname> system. The installation-wide -<acronym>ODBC</acronym> configuration file will be placed into -the top directory of the Postgres target tree (<envar>POSTGRESDIR</envar>). -This can be overridden from the <application>make</application> command-line -as -<programlisting> -% make ODBCINST=<replaceable>filename</replaceable> install -</programlisting> -</Para> + <para> + The first thing + to note about the <productname>psqlODBC</productname> driver + (or any <acronym>ODBC</acronym> driver) is that there must + exist a driver manager on the system where + the <acronym>ODBC</acronym> driver is to be + used. There exists a freeware <acronym>ODBC</acronym> driver for Unix + called <productname>iodbc</productname> which + can be obtained from various locations on the Net, including at + <ulink url="http://www.as220.org/FreeODBC/iodbc-2.12.shar.Z">AS200</ulink>. + Instructions for installing <productname>iodbc</productname> + are beyond the scope of this + document, but there is a <filename>README</filename> + that can be found inside the <productname>iodbc</productname> compressed + .shar file that should explain how to get it up and running. + </para> -<procedure> -<title>Pre-v6.4 Integrated Installation</title> + <para> + Having said that, any driver manager that you can find for your platform + should support the <productname>psqlODBC</productname> driver + or any <acronym>ODBC</acronym> driver. + </para> -<para> -If you have a <productname>Postgres</productname> installation older than -v6.4, you have the original source tree available, -and you want to use the newest version of the <acronym>ODBC</acronym> -driver, then you may want to try this form of installation. -</Para> + <para> + The Unix configuration files for <productname>psqlODBC</productname> + have recently been extensively + reworked to allow for easy building on supported platforms as + well as to allow for support of other Unix platforms in the future. + The new configuration and build files for the driver should make it + a simple process to build the driver on the supported platforms. Currently + these include Linux and FreeBSD but we are hoping other users will + contribute the necessary information to quickly expand the number of + platforms for which the driver can be built. + </para> -<step performance="required"> -<para> -Copy the output tar file to your target system and unpack it into a -clean directory. -</Para> -</step> -<step performance="required"> -<para> -From the directory containing the -sources, type: + <para> + There are actually two separate methods to build the driver depending on + how you received it and these differences come down to only where and how to + run <application>configure</application> and <application>make</application>. + The driver can be built in a standalone, client-only installation, or can be + built as a part of the main <productname>Postgres</productname> distribution. + The standalone installation is convenient if you have <acronym>ODBC</acronym> + client applications on multiple, heterogeneous platforms. The integrated + installation is convenient when the target client is the same as the + server, or when the client and server have similar runtime configurations. + </para> -<programlisting> -% ./configure -% make -% make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install -</programlisting> -</Para> -</step> + <para> + Specifically if you have received the <productname>psqlODBC</productname> + driver as part of the <productname>Postgres</productname> distribution + (from now on referred to as an "integrated" build) then you will + configure and make the <acronym>ODBC</acronym> driver + from the top level source directory + of the <productname>Postgres</productname> distribution + along with the rest of its libraries. + If you received the driver as a standalone package than you will run + configure and make from the directory in which you unpacked the + driver source. + </para> -<step performance="optional"> -<para> -If you would like to install components into different trees, -then you can specify various destinations explicitly: + <procedure> + <title>Integrated Installation</title> -<programlisting> -% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install -</programlisting> -</Para> -</step> -</procedure> + <para> + This installation procedure is appropriate for an integrated installation. + </para> -<procedure> -<title>Standalone Installation</title> + <step performance="required"> + <para> + Specify the <option>--with-odbc</option> + command-line argument for <application>src/configure</application>: -<para> -A standalone installation is not integrated with or built on the normal -<productname>Postgres</productname> distribution. It should be best suited -for building the <acronym>ODBC</acronym> driver for multiple, heterogeneous -clients who do not have a locally-installed <productname>Postgres</productname> -source tree. -</Para> + <programlisting> + % ./configure --with-odbc + % make + </programlisting> + </para> + </step> + <step performance="required"> + <para> + Rebuild the <productname>Postgres</productname> distribution: -<para> -The default location for libraries and headers -for the standalone installation is <filename>/usr/local/lib</filename> - and <filename>/usr/local/include/iodbc</filename>, respectively. -There is another system wide configuration file that gets installed -as <filename>/share/odbcinst.ini</filename> (if <filename>/share</filename> - exists) or as <filename>/etc/odbcinst.ini</filename> - (if <filename>/share</filename> does not exist). -</Para> + <programlisting> + % make install + </programlisting> + </para> + </step> + </procedure> -<note> -<para> -Installation of files into <filename>/share</filename> - or <filename>/etc</filename> requires system root privileges. -Most installation steps for <productname>Postgres</productname> do not -have this requirement, and you can choose another destination which -is writable by your non-root <productname>Postgres</productname> superuser -account instead. -</Para> -</note> + <para> + Once configured, the <acronym>ODBC</acronym> driver will be built and installed + into the areas defined for the other components of the + <productname>Postgres</productname> system. The installation-wide + <acronym>ODBC</acronym> configuration file will be placed into + the top directory of the Postgres target tree (<envar>POSTGRESDIR</envar>). + This can be overridden from the <application>make</application> command-line + as + <programlisting> + % make ODBCINST=<replaceable>filename</replaceable> install + </programlisting> + </para> -<step performance="required"> -<para> -The standalone installation distribution can be built from the -<productname>Postgres</productname> distribution or may be obtained from -<ulink url="http://www.insightdist.com/psqlodbc">Insight Distributors</ulink>, -the current maintainers of the non-Unix sources. -</Para> + <procedure> + <title>Pre-v6.4 Integrated Installation</title> -<para> -Copy the zip -or gzipped tarfile to an empty directory. If using the zip package -unzip it with the command -<programlisting> -% unzip -a <replaceable>packagename</replaceable> -</programlisting> + <para> + If you have a <productname>Postgres</productname> installation older than + v6.4, you have the original source tree available, + and you want to use the newest version of the <acronym>ODBC</acronym> + driver, then you may want to try this form of installation. + </para> -The <option>-a</option> option -is necessary to get rid of <acronym>DOS</acronym> -CR/LF pairs in the source files. -</Para> + <step performance="required"> + <para> + Copy the output tar file to your target system and unpack it into a + clean directory. + </para> + </step> + <step performance="required"> + <para> + From the directory containing the + sources, type: -<para> -If you have the gzipped tar package than simply run + <programlisting> + % ./configure + % make + % make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install + </programlisting> + </para> + </step> -<programlisting> -tar -xzf <replaceable>packagename</replaceable> -</programlisting> -</Para> + <step performance="optional"> + <para> + If you would like to install components into different trees, + then you can specify various destinations explicitly: -<substeps> + <programlisting> + % make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install + </programlisting> + </para> + </step> + </procedure> -<step performance="optional"> -<para> -To create a tar file for a complete standalone installation -from the main <productname>Postgres</productname> source tree: -</Para> -</step> -</substeps> -</step> -<step performance="required"> -<para> -Configure the main <productname>Postgres</productname> distribution. -</Para> -</step> -<step performance="required"> -<para> -Create the tar file: + <procedure> + <title>Standalone Installation</title> -<programlisting> -% cd interfaces/odbc -% make standalone -</programlisting> -</Para> -</step> + <para> + A standalone installation is not integrated with or built on the normal + <productname>Postgres</productname> distribution. It should be best suited + for building the <acronym>ODBC</acronym> driver for multiple, heterogeneous + clients who do not have a locally-installed <productname>Postgres</productname> + source tree. + </para> -<step performance="required"> -<para> -Copy the output tar file to your target system. Be sure to transfer as -a binary file if using <application>ftp</application>. -</Para> -</step> + <para> + The default location for libraries and headers + for the standalone installation is <filename>/usr/local/lib</filename> + and <filename>/usr/local/include/iodbc</filename>, respectively. + There is another system wide configuration file that gets installed + as <filename>/share/odbcinst.ini</filename> (if <filename>/share</filename> + exists) or as <filename>/etc/odbcinst.ini</filename> + (if <filename>/share</filename> does not exist). + </para> -<step performance="required"> -<para> -Unpack the tar file into a clean -directory. -</Para> -</step> + <note> + <para> + Installation of files into <filename>/share</filename> + or <filename>/etc</filename> requires system root privileges. + Most installation steps for <productname>Postgres</productname> do not + have this requirement, and you can choose another destination which + is writable by your non-root <productname>Postgres</productname> superuser + account instead. + </para> + </note> -<step performance="required"> -<para> -Configure the standalone installation: + <step performance="required"> + <para> + The standalone installation distribution can be built from the + <productname>Postgres</productname> distribution or may be obtained from + <ulink url="http://www.insightdist.com/psqlodbc">Insight Distributors</ulink>, + the current maintainers of the non-Unix sources. + </para> -<programlisting> -% ./configure -</programlisting> -</Para> + <para> + Copy the zip + or gzipped tarfile to an empty directory. If using the zip package + unzip it with the command + <programlisting> + % unzip -a <replaceable>packagename</replaceable> + </programlisting> -<para> -The configuration can be done with options: + The <option>-a</option> option + is necessary to get rid of <acronym>DOS</acronym> + CR/LF pairs in the source files. + </para> -<programlisting> -% ./configure --prefix=<replaceable>rootdir</replaceable> --with-odbc=<replaceable>inidir</replaceable> -</programlisting> + <para> + If you have the gzipped tar package than simply run -where <option>--prefix</option> installs the libraries and headers in -the directories <filename><replaceable>rootdir</replaceable>/lib</filename> and -<filename><replaceable>rootdir</replaceable>/include/iodbc</filename>, and -<option>--with-odbc</option> installs <filename>odbcinst.ini</filename> in the -specified directory. -</Para> + <programlisting> + tar -xzf <replaceable>packagename</replaceable> + </programlisting> + </para> -<para> -Note that both of these options can also be used from the integrated build -but be aware that <emphasis>when used in the integrated build</emphasis> -<option>--prefix</option> will also apply to the rest of -your <productname>Postgres</productname> installation. -<option>--with-odbc</option> applies only to the configuration file - <filename>odbcinst.ini</filename>. -</Para> -</step> + <substeps> -<step performance="required"> -<para> -Compile and link the source code: + <step performance="optional"> + <para> + To create a tar file for a complete standalone installation + from the main <productname>Postgres</productname> source tree: + </para> + </step> + </substeps> + </step> + <step performance="required"> + <para> + Configure the main <productname>Postgres</productname> distribution. + </para> + </step> + <step performance="required"> + <para> + Create the tar file: -<programlisting> -% make ODBCINST=<replaceable>instdir</replaceable> -</programlisting> -</Para> + <programlisting> + % cd interfaces/odbc + % make standalone + </programlisting> + </para> + </step> -<para> -You can also override the default location for installation on the -'make' command line. This only applies to the installation of the -library and header files. Since the driver needs to know the location -of the odbcinst.ini file attempting to override the enviroment variable -that specifies its installation directory will probably cause you -headaches. It is safest simply to allow the driver to install the -odbcinst.ini file in the default directory or the directory you specified -on the './configure' command line with --with-odbc. -</Para> -</step> + <step performance="required"> + <para> + Copy the output tar file to your target system. Be sure to transfer as + a binary file if using <application>ftp</application>. + </para> + </step> -<!-- -This doesn't currently work - thomas 1998-10-19 -<tip> -<para> -<envar>ODBCINST</envar> can be specified during configuration or during -the compilation. It is not necessary to do so in both steps. -</tip> ---> + <step performance="required"> + <para> + Unpack the tar file into a clean + directory. + </para> + </step> -<step performance="required"> -<para> -Install the source code: + <step performance="required"> + <para> + Configure the standalone installation: -<programlisting> -% make POSTGRESDIR=<replaceable>targettree</replaceable> install -</programlisting> -</Para> + <programlisting> + % ./configure + </programlisting> + </para> -<para> -To override the library and header installation directories separately -you need to pass the correct installation variables on the -<literal>make install</literal> command line. These variables are -<envar>LIBDIR</envar>, <envar>HEADERDIR</envar> - and <envar>ODBCINST</envar>. -Overriding <envar>POSTGRESDIR</envar> on the make command line will cause - <envar>LIBDIR</envar> and <envar>HEADERDIR</envar> - to be rooted at the new directory you specify. -<envar>ODBCINST</envar> is independent of <envar>POSTGRESDIR</envar>. -</Para> + <para> + The configuration can be done with options: -<para> -Here is how you would specify the various destinations explicitly: + <programlisting> + % ./configure --prefix=<replaceable>rootdir</replaceable> + --with-odbc=<replaceable>inidir</replaceable> + </programlisting> -<programlisting> -% make BINDIR=<replaceable>bindir</replaceable> LIBDIR=<replaceable>libdir</replaceable> HEADERDIR=<replaceable>headerdir</replaceable> install -</programlisting> -</Para> + where <option>--prefix</option> installs the libraries and headers in + the directories <filename><replaceable>rootdir</replaceable>/lib</filename> and + <filename><replaceable>rootdir</replaceable>/include/iodbc</filename>, and + <option>--with-odbc</option> installs <filename>odbcinst.ini</filename> in the + specified directory. + </para> -<para> -For example, typing + <para> + Note that both of these options can also be used from the integrated build + but be aware that <emphasis>when used in the integrated build</emphasis> + <option>--prefix</option> will also apply to the rest of + your <productname>Postgres</productname> installation. + <option>--with-odbc</option> applies only to the configuration file + <filename>odbcinst.ini</filename>. + </para> + </step> -<programlisting> -% make POSTGRESDIR=/opt/psqlodbc install -</programlisting> + <step performance="required"> + <para> + Compile and link the source code: -(after you've used - <application>./configure</application> and <application>make</application>) -will cause the libraries and headers to be installed in the directories -<filename>/opt/psqlodbc/lib</filename> - and <filename>/opt/psqlodbc/include/iodbc</filename> respectively. -</Para> + <programlisting> + % make ODBCINST=<replaceable>instdir</replaceable> + </programlisting> + </para> -<para> -The command + <para> + You can also override the default location for installation on the + 'make' command line. This only applies to the installation of the + library and header files. Since the driver needs to know the location + of the odbcinst.ini file attempting to override the enviroment variable + that specifies its installation directory will probably cause you + headaches. It is safest simply to allow the driver to install the + odbcinst.ini file in the default directory or the directory you specified + on the './configure' command line with --with-odbc. + </para> + </step> -<programlisting> -% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install -</programlisting> + <!-- + This doesn't currently work - thomas 1998-10-19 + <tip> + <para> + <envar>ODBCINST</envar> can be specified during configuration or during + the compilation. It is not necessary to do so in both steps. + </tip> + --> -should cause the libraries to be installed in /opt/psqlodbc/lib and -the headers in /usr/local/include/iodbc. If this doesn't work as -expected please contact one of the maintainers. -</Para> -</step> -</procedure> -</sect2> -</sect1> + <step performance="required"> + <para> + Install the source code: -<sect1> -<title>Configuration Files</title> + <programlisting> + % make POSTGRESDIR=<replaceable>targettree</replaceable> install + </programlisting> + </para> -<para> -<filename>~/.odbc.ini</filename> contains user-specified access information -for the <productname>psqlODBC</productname> driver. -The file uses conventions typical for <productname>Windows</productname> -Registry files, but despite this restriction can be made to work. -</Para> + <para> + To override the library and header installation directories separately + you need to pass the correct installation variables on the + <literal>make install</literal> command line. These variables are + <envar>LIBDIR</envar>, <envar>HEADERDIR</envar> + and <envar>ODBCINST</envar>. + Overriding <envar>POSTGRESDIR</envar> on the make command line will cause + <envar>LIBDIR</envar> and <envar>HEADERDIR</envar> + to be rooted at the new directory you specify. + <envar>ODBCINST</envar> is independent of <envar>POSTGRESDIR</envar>. + </para> -<para> -The <filename>.odbc.ini</filename> file has three required sections. -The first is <literal>[ODBC Data Sources]</literal> -which is a list of arbitrary names and descriptions for each database -you wish to access. The second required section is the -Data Source Specification and there will be one of these sections -for each database. -Each section must be labeled with the name given in -<literal>[ODBC Data Sources]</literal> and must contain the following entries: + <para> + Here is how you would specify the various destinations explicitly: -<programlisting> -Driver = <replaceable>POSTGRESDIR</replaceable>/lib/libpsqlodbc.so -Database=<replaceable>DatabaseName</replaceable> -Servername=localhost -Port=5432 -</programlisting> + <programlisting> + % make BINDIR=<replaceable>bindir</replaceable> + LIBDIR<replaceable>>libdi</replaceable>> + HEADERDIR=<replaceable>headerdir</replaceable> install + </programlisting> + </para> -<tip> -<para> -Remember that the <productname>Postgres</productname> database name is -usually a single word, without path names of any sort. -The <productname>Postgres</productname> server manages the actual access -to the database, and you need only specify the name from the client. -</Para> -</tip> + <para> + For example, typing -Other entries may be inserted to control the format of the display. -The third required section is <literal>[ODBC]</literal> -which must contain the <literal>InstallDir</literal> keyword -and which may contain other options. -</Para> + <programlisting> + % make POSTGRESDIR=/opt/psqlodbc install + </programlisting> -<para> -Here is an example <filename>.odbc.ini</filename> file, -showing access information for three databases: + (after you've used + <application>./configure</application> and <application>make</application>) + will cause the libraries and headers to be installed in the directories + <filename>/opt/psqlodbc/lib</filename> + and <filename>/opt/psqlodbc/include/iodbc</filename> respectively. + </para> -<programlisting> + <para> + The command + + <programlisting> + % make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install + </programlisting> + + should cause the libraries to be installed in /opt/psqlodbc/lib and + the headers in /usr/local/include/iodbc. If this doesn't work as + expected please contact one of the maintainers. + </para> + </step> + </procedure> + </sect2> + </sect1> + + <sect1> + <title>Configuration Files</title> + + <para> + <filename>~/.odbc.ini</filename> contains user-specified access information + for the <productname>psqlODBC</productname> driver. + The file uses conventions typical for <productname>Windows</productname> + Registry files, but despite this restriction can be made to work. + </para> + + <para> + The <filename>.odbc.ini</filename> file has three required sections. + The first is <literal>[ODBC Data Sources]</literal> + which is a list of arbitrary names and descriptions for each database + you wish to access. The second required section is the + Data Source Specification and there will be one of these sections + for each database. + Each section must be labeled with the name given in + <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 + </programlisting> + + <tip> + <para> + Remember that the <productname>Postgres</productname> database name is + usually a single word, without path names of any sort. + The <productname>Postgres</productname> server manages the actual access + to the database, and you need only specify the name from the client. + </para> + </tip> + + Other entries may be inserted to control the format of the display. + The third required section is <literal>[ODBC]</literal> + which must contain the <literal>InstallDir</literal> keyword + and which may contain other options. + </para> + + <para> + Here is an example <filename>.odbc.ini</filename> file, + showing access information for three databases: + + <programlisting> [ODBC Data Sources] DataEntry = Read/Write Database QueryOnly = Read-only Database @@ -620,465 +625,468 @@ Driver = /opt/postgres/current/lib/libpsqlodbc.so [ODBC] InstallDir = /opt/applix/axdata/axshlib -</programlisting> -</Para> -</sect1> -<sect1> -<title>ApplixWare</title> + </programlisting> + </para> + </sect1> + <sect1> + <title>ApplixWare</title> -<sect2> -<title>Configuration</title> + <sect2> + <title>Configuration</title> -<para> -<productname>ApplixWare</productname> must be configured correctly - in order for it to -be able to access the <productname>Postgres</productname> - <acronym>ODBC</acronym> software drivers. -</Para> + <para> + <productname>ApplixWare</productname> must be configured correctly + in order for it to + be able to access the <productname>Postgres</productname> + <acronym>ODBC</acronym> software drivers. + </para> -<procedure> -<title>Enabling ApplixWare Database Access</title> + <procedure> + <title>Enabling ApplixWare Database Access</title> -<para> -These instructions are for the 4.4.1 release of - <productname>ApplixWare</productname> on <productname>Linux</productname>. -Refer to the <citetitle>Linux Sys Admin</citetitle> on-line book - for more detailed information. -</Para> + <para> + These instructions are for the <literal>4.4.2</literal> release of + <productname>ApplixWare</productname> on <productname>Linux</productname>. + Refer to the <citetitle>Linux Sys Admin</citetitle> on-line book + for more detailed information. + </para> -<step performance="required"> -<para> -You must modify <filename>axnet.cnf</filename> so that - <filename>elfodbc</filename> can -find <filename>libodbc.so</filename> - (the <acronym>ODBC</acronym> driver manager) shared library. -This library is included with the ApplixWare distribution, -but <filename>axnet.cnf</filename> needs to be modified to point to the -correct location. -</Para> + <step performance="required"> + <para> + You must modify <filename>axnet.cnf</filename> so that + <filename>elfodbc</filename> can + find <filename>libodbc.so</filename> + (the <acronym>ODBC</acronym> driver manager) shared library. + This library is included with the ApplixWare distribution, + but <filename>axnet.cnf</filename> needs to be modified to point to the + correct location. + </para> -<para> -As root, edit the file -<filename><replaceable>applixroot</replaceable>/applix/axdata/axnet.cnf</filename>. -</Para> + <para> + As root, edit the file + <filename><replaceable>applixroot</replaceable>/applix/axdata/axnet.cnf</filename>. + </para> -<substeps> + <substeps> -<step performance="required"> -<para> -At the bottom of <filename>axnet.cnf</filename>, -find the line that starts with + <step performance="required"> + <para> + At the bottom of <filename>axnet.cnf</filename>, + find the line that starts with -<programlisting> -#libFor elfodbc /ax/<replaceable>...</replaceable> -</programlisting> -</Para> -</step> -<step performance="required"> -<para> -Change line to read + <programlisting> + #libFor elfodbc /ax/<replaceable>...</replaceable> + </programlisting> + </para> + </step> + <step performance="required"> + <para> + Change line to read -<programlisting> -libFor elfodbc <replaceable>applixroot</replaceable>/applix/axdata/axshlib/lib -</programlisting> + <programlisting> + libFor elfodbc <replaceable>applixroot</replaceable>/applix/axdata/axshlib/lib + </programlisting> -which will tell elfodbc to look in this directory -for the <acronym>ODBC</acronym> support library. -If you have installed applix somewhere else, -change the path accordingly. -</Para> -</step> -</substeps> -</step> + which will tell elfodbc to look in this directory + for the <acronym>ODBC</acronym> support library. + Typically <productname>Applix</productname> is installed in + <filename>/opt</filename> so the full path would be + <filename>/opt/applix/axdata/axshlib/lib</filename>, + but if you have installed applix somewhere else then + change the path accordingly. + </para> + </step> + </substeps> + </step> -<step performance="required"> -<para> -Create <filename>.odbc.ini</filename> as -described above. You may also want to add the flag + <step performance="required"> + <para> + Create <filename>.odbc.ini</filename> as + described above. You may also want to add the flag -<programlisting> -TextAsLongVarchar=0 -</programlisting> + <programlisting> + TextAsLongVarchar=0 + </programlisting> -to the database-specific portion of <filename>.odbc.ini</filename> -so that text fields will not be shown as <literal>**BLOB**</literal>. -</Para> -</step> -</procedure> + to the database-specific portion of <filename>.odbc.ini</filename> + so that text fields will not be shown as <literal>**BLOB**</literal>. + </para> + </step> + </procedure> -<procedure> -<title>Testing ApplixWare ODBC Connections</title> + <procedure> + <title>Testing ApplixWare ODBC Connections</title> -<step performance="required"> -<para> - Bring up <application>Applix Data</application> -</Para> -</step> + <step performance="required"> + <para> + Bring up <application>Applix Data</application> + </para> + </step> -<step performance="required"> -<para> -Select the <productname>Postgres</productname> database of interest. -</Para> + <step performance="required"> + <para> + Select the <productname>Postgres</productname> database of interest. + </para> -<substeps> + <substeps> -<step performance="required"> -<para> -Select <command>Query->Choose Server</command>. -</Para> -</step> -<step performance="required"> -<para> - Select <acronym>ODBC</acronym>, and click <command>Browse</command>. -The database you configured in <filename>.odbc.ini</filename> - should be shown. Make sure that the <option>Host: field</option> - is empty (if it is not, axnet will try to contact axnet on another machine - to look for the database). -</Para> -</step> -<step performance="required"> -<para> -Select the database in the box that was launched by <command>Browse</command>, - then click <command>OK</command>. -</Para> -</step> -<step performance="required"> -<para> -Enter username and password in the login identification dialog, - and click <command>OK</command>. -</Para> -</step> -</substeps> + <step performance="required"> + <para> + Select <command>Query->Choose Server</command>. + </para> + </step> + <step performance="required"> + <para> + Select <acronym>ODBC</acronym>, and click <command>Browse</command>. + The database you configured in <filename>.odbc.ini</filename> + should be shown. Make sure that the <option>Host: field</option> + is empty (if it is not, axnet will try to contact axnet on another machine + to look for the database). + </para> + </step> + <step performance="required"> + <para> + Select the database in the box that was launched by <command>Browse</command>, + then click <command>OK</command>. + </para> + </step> + <step performance="required"> + <para> + Enter username and password in the login identification dialog, + and click <command>OK</command>. + </para> + </step> + </substeps> -<para> - You should see <quote>Starting elfodbc server</quote> - in the lower left corner of the - data window. If you get an error dialog box, see the debugging section - below. -</Para> -</step> -<step performance="required"> -<para> - The 'Ready' message will appear in the lower left corner of the data - window. This indicates that you can now enter queries. -</Para> -</step> -<step performance="required"> -<para> - Select a table from Query->Choose tables, and then select Query->Query - to access the database. The first 50 or so rows from the table should - appear. -</Para> -</step> -</procedure> -</sect2> + <para> + You should see <quote>Starting elfodbc server</quote> + in the lower left corner of the + data window. If you get an error dialog box, see the debugging section + below. + </para> + </step> + <step performance="required"> + <para> + The 'Ready' message will appear in the lower left corner of the data + window. This indicates that you can now enter queries. + </para> + </step> + <step performance="required"> + <para> + Select a table from Query->Choose tables, and then select Query->Query + to access the database. The first 50 or so rows from the table should + appear. + </para> + </step> + </procedure> + </sect2> -<sect2> -<title>Common Problems</title> + <sect2> + <title>Common Problems</title> -<para> -The following messages can appear while trying to make an -<acronym>ODBC</acronym> connection through -<productname>Applix Data</productname>: + <para> + The following messages can appear while trying to make an + <acronym>ODBC</acronym> connection through + <productname>Applix Data</productname>: -<variablelist> -<varlistentry> -<term> -Cannot launch gateway on server -</term> -<listitem> -<para> -<literal>elfodbc</literal> can't find <filename>libodbc.so</filename>. -Check your <filename>axnet.cnf</filename>. -</Para> -</listitem> -</varlistentry> + <variablelist> + <varlistentry> + <term> + Cannot launch gateway on server + </term> + <listitem> + <para> + <literal>elfodbc</literal> can't find <filename>libodbc.so</filename>. + Check your <filename>axnet.cnf</filename>. + </para> + </listitem> + </varlistentry> -<varlistentry> -<term> -Error from ODBC Gateway: -IM003::[iODBC][Driver Manager]Specified driver could not be loaded -</term> -<listitem> -<para> -<filename>libodbc.so</filename> cannot find the driver listed in -<filename>.odbc.ini</filename>. Verify the settings. -</Para> -</listitem> -</varlistentry> + <varlistentry> + <term> + Error from ODBC Gateway: + IM003::[iODBC][Driver Manager]Specified driver could not be loaded + </term> + <listitem> + <para> + <filename>libodbc.so</filename> cannot find the driver listed in + <filename>.odbc.ini</filename>. Verify the settings. + </para> + </listitem> + </varlistentry> -<varlistentry> -<term> -Server: Broken Pipe -</term> + <varlistentry> + <term> + Server: Broken Pipe + </term> -<listitem> -<para> + <listitem> + <para> The driver process has terminated due to some other problem. You might not have an up-to-date version of the <productname>Postgres</productname> -<acronym>ODBC</acronym> package. -</Para> -</listitem> -</varlistentry> + <acronym>ODBC</acronym> package. + </para> + </listitem> + </varlistentry> -<varlistentry> -<term> -setuid to 256: failed to launch gateway -</term> + <varlistentry> + <term> + setuid to 256: failed to launch gateway + </term> -<listitem> -<para> -The September release of ApplixWare v4.4.1 (the first release with official -<acronym>ODBC</acronym> support under Linux) shows problems when usernames -exceed eight (8) characters in length. -Problem description ontributed by -<ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink>. -</Para> -</listitem> -</varlistentry> + <listitem> + <para> + The September release of ApplixWare v4.4.1 (the first release with official + <acronym>ODBC</acronym> support under Linux) shows problems when usernames + exceed eight (8) characters in length. + Problem description ontributed by + <ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink>. + </para> + </listitem> + </varlistentry> -</variablelist> -</para> + </variablelist> + </para> -<para> -<note> -<title>Author</title> + <para> + <note> + <title>Author</title> -<para> -Contributed by -<ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink> on -1998-10-20. -</para> -</note> + <para> + Contributed by + <ulink url="mailto:scampbell@lear.com">Steve Campbell</ulink> on + 1998-10-20. + </para> + </note> -The <application>axnet</application> program's security system - seems a little suspect. <application>axnet</application> does things - on behalf of the user and on a true - multiple user system it really should be run with root security -(so it can read/write in each user's directory). -I would hesitate to recommend this, however, since we have no idea what -security holes this creates. -</para> -</sect2> + The <application>axnet</application> program's security system + seems a little suspect. <application>axnet</application> does things + on behalf of the user and on a true + multiple user system it really should be run with root security + (so it can read/write in each user's directory). + I would hesitate to recommend this, however, since we have no idea what + security holes this creates. + </para> + </sect2> -<sect2> -<title>Debugging ApplixWare ODBC Connections</title> + <sect2> + <title>Debugging ApplixWare ODBC Connections</title> -<para> -One good tool for debugging connection problems uses the Unix system -utility <application>strace</application>. -</para> -<procedure> -<title>Debugging with strace</title> + <para> + One good tool for debugging connection problems uses the Unix system + utility <application>strace</application>. + </para> + <procedure> + <title>Debugging with strace</title> -<step performance="required"> -<para> -Start applixware. -</para> -</step> -<step performance="required"> -<para> -Start an <application>strace</application> on -the axnet process. For example, if + <step performance="required"> + <para> + Start applixware. + </para> + </step> + <step performance="required"> + <para> + Start an <application>strace</application> on + the axnet process. For example, if -<programlisting> -ps -aucx | grep ax -</programlisting> + <programlisting> + ps -aucx | grep ax + </programlisting> -shows + 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 -</programlisting> -</para> + <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 + </programlisting> + </para> -<para> -Then run + <para> + Then run -<programlisting> - strace -f -s 1024 -p 10432 -</programlisting> -</para> -</step> + <programlisting> + strace -f -s 1024 -p 10432 + </programlisting> + </para> + </step> -<step performance="required"> -<para> -Check the strace output. -</para> -<note> -<title>Note from Cary</title> + <step performance="required"> + <para> + Check the strace output. + </para> + <note> + <title>Note from Cary</title> -<para> -Many of the error messages from <productname>ApplixWare</productname> -go to <filename>stderr</filename>, -but I'm not sure where <filename>stderr</filename> -is sent, so <application>strace</application> is the way to find out. -</para> -</note> -</step> -</procedure> + <para> + Many of the error messages from <productname>ApplixWare</productname> + go to <filename>stderr</filename>, + but I'm not sure where <filename>stderr</filename> + is sent, so <application>strace</application> is the way to find out. + </para> + </note> + </step> + </procedure> -<para> - For example, after getting -a <quote>Cannot launch gateway on server</quote>, -I ran strace on axnet and got + <para> + For example, after getting + a <quote>Cannot launch gateway on server</quote>, + 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) -</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. -</para> -</sect2> + <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) + </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. + </para> + </sect2> -<sect2> -<title>Running the ApplixWare Demo</title> + <sect2> + <title>Running the ApplixWare Demo</title> -<para> -In order to go through the -<citetitle>ApplixWare Data Tutorial</citetitle>, you need to create -the sample tables that the Tutorial refers to. The ELF Macro used to -create the tables tries to use a NULL condition -on many of the database columns, -and <productname>Postgres</productname> does not currently allow this option. -</para> -<para> -To get around this problem, you can do the following: -</para> + <para> + In order to go through the + <citetitle>ApplixWare Data Tutorial</citetitle>, you need to create + the sample tables that the Tutorial refers to. The ELF Macro used to + create the tables tries to use a NULL condition + on many of the database columns, + and <productname>Postgres</productname> does not currently allow this option. + </para> + <para> + To get around this problem, you can do the following: + </para> -<procedure> -<title>Modifying the ApplixWare Demo</title> + <procedure> + <title>Modifying the ApplixWare Demo</title> -<step performance="required"> -<para> -Copy <filename>/opt/applix/axdata/eng/Demos/sqldemo.am</filename> - to a local directory. -</para> -</step> + <step performance="required"> + <para> + Copy <filename>/opt/applix/axdata/eng/Demos/sqldemo.am</filename> + to a local directory. + </para> + </step> -<step performance="required"> -<para> -Edit this local copy of <filename>sqldemo.am</filename>: -</para> + <step performance="required"> + <para> + Edit this local copy of <filename>sqldemo.am</filename>: + </para> -<substeps> + <substeps> -<step performance="required"> -<para> -Search for 'null_clause = "NULL" -</para> -</step> + <step performance="required"> + <para> + Search for 'null_clause = "NULL" + </para> + </step> -<step performance="required"> -<para> -Change this to null_clause = "" -</para> -</step> + <step performance="required"> + <para> + Change this to null_clause = "" + </para> + </step> -</substeps> -</step> -<step performance="required"> -<para> -Start <application>Applix Macro Editor</application>. -</para> -</step> + </substeps> + </step> + <step performance="required"> + <para> + Start <application>Applix Macro Editor</application>. + </para> + </step> -<step performance="required"> -<para> -Open the sqldemo.am file from the <application>Macro Editor</application>. -</para> -</step> + <step performance="required"> + <para> + Open the sqldemo.am file from the <application>Macro Editor</application>. + </para> + </step> -<step performance="required"> -<para> -Select <command>File->Compile and Save</command>. -</para> -</step> + <step performance="required"> + <para> + Select <command>File->Compile and Save</command>. + </para> + </step> -<step performance="required"> -<para> -Exit <application>Macro Editor</application>. -</para> -</step> + <step performance="required"> + <para> + Exit <application>Macro Editor</application>. + </para> + </step> -<step performance="required"> -<para> -Start <application>Applix Data</application>. -</para> -</step> + <step performance="required"> + <para> + Start <application>Applix Data</application>. + </para> + </step> -<step performance="required"> -<para> -Select <command>*->Run Macro</command> -</para> -</step> + <step performance="required"> + <para> + Select <command>*->Run Macro</command> + </para> + </step> -<step performance="required"> -<para> -Enter the value <quote>sqldemo</quote>, then click <command>OK</command>. -</para> + <step performance="required"> + <para> + Enter the value <quote>sqldemo</quote>, then click <command>OK</command>. + </para> -<para> -You should see the progress in the status line of the data window - (in the lower left corner). -</para> -</step> + <para> + You should see the progress in the status line of the data window + (in the lower left corner). + </para> + </step> -<step performance="required"> -<para> -You should now be able to access the demo tables. -</para> -</step> -</procedure> -</sect2> -<sect2> -<title>Useful Macros</title> + <step performance="required"> + <para> + You should now be able to access the demo tables. + </para> + </step> + </procedure> + </sect2> + <sect2> + <title>Useful Macros</title> -<para> -You can add information about your -database login and password to the standard Applix startup -macro file. This is an example -<filename>~/axhome/macros/login.am</filename> file: + <para> + You can add information about your + database login and password to the standard Applix startup + macro file. This is an example + <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 -</programlisting> + <programlisting> + macro login + set_set_system_var@("sql_username@","tgl") + set_system_var@("sql_passwd@","no$way") + endmacro + </programlisting> -<caution> -<para> -You should be careful about the file protections on any file containing -username and password information. -</para> -</caution> -</para> -</sect2> -<sect2> -<title>Supported Platforms</title> + <caution> + <para> + You should be careful about the file protections on any file containing + username and password information. + </para> + </caution> + </para> + </sect2> + <sect2> + <title>Supported Platforms</title> -<para> -<productname>psqlODBC</productname> has been built and tested -on <productname>Linux</productname>. There have been reports of success -with FreeBSD and with Solaris. There are no known restrictions -on the basic code for other platforms which already support -<productname>Postgres</productname>. -</para> -</sect2> -</sect1> -</Chapter> + <para> + <productname>psqlODBC</productname> has been built and tested + on <productname>Linux</productname>. There have been reports of success + with FreeBSD and with Solaris. There are no known restrictions + on the basic code for other platforms which already support + <productname>Postgres</productname>. + </para> + </sect2> + </sect1> + </chapter> <!-- Keep this comment at the end of the file Local variables: -mode: sgml +mode:sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil @@ -1088,7 +1096,7 @@ 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-catalogs:("/usr/lib/sgml/CATALOG") sgml-local-ecat-files:nil End: --> diff --git a/doc/src/sgml/ref/abort.sgml b/doc/src/sgml/ref/abort.sgml index 062e660332..017d4d7036 100644 --- a/doc/src/sgml/ref/abort.sgml +++ b/doc/src/sgml/ref/abort.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/abort.sgml,v 1.6 2000/03/26 18:32:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/abort.sgml,v 1.7 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -129,7 +129,7 @@ ABORT WORK; SQL92 </title> <para> - This command is a <productname>PostgreSQL</productname> extension present + This command is a <productname>Postgres</productname> extension present for historical reasons. <command>ROLLBACK</command> is the <acronym>SQL92</acronym> equivalent command. </para> diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index 54d06e5ce5..ca302cf798 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.10 2000/01/29 16:58:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.11 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -247,7 +247,7 @@ ALTER TABLE distributors RENAME TO suppliers; <para> SQL92 specifies some additional capabilities for <command>ALTER TABLE</command> - statement which are not yet directly supported by <productname>PostgreSQL</productname>: + statement which are not yet directly supported by <productname>Postgres</productname>: <variablelist> <varlistentry> @@ -308,8 +308,8 @@ DROP TABLE temp; </para> <para> - The clauses to rename columns and tables are <productname>PostgreSQL</productname> - extensions. SQL92 does not provide for them. + The clauses to rename columns and tables are <productname>Postgres</productname> + extensions from SQL92. </para> </refsect2> diff --git a/doc/src/sgml/ref/alter_user.sgml b/doc/src/sgml/ref/alter_user.sgml index f3ce32bb16..d97648e052 100644 --- a/doc/src/sgml/ref/alter_user.sgml +++ b/doc/src/sgml/ref/alter_user.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_user.sgml,v 1.10 2000/01/14 22:11:32 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_user.sgml,v 1.11 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -138,7 +138,7 @@ ERROR: ALTER USER: user "username" does not exist </title> <para> <command>ALTER USER</command> is used to change the attributes of a user's - <productname>PostgreSQL</productname> account. Only a database superuser + <productname>Postgres</productname> account. Only a database superuser can change privileges and password expiration with this command. Ordinary users can only change their own password. </para> diff --git a/doc/src/sgml/ref/begin.sgml b/doc/src/sgml/ref/begin.sgml index 1ee645c771..8f7eae33c5 100644 --- a/doc/src/sgml/ref/begin.sgml +++ b/doc/src/sgml/ref/begin.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/begin.sgml,v 1.10 2000/01/29 16:58:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/begin.sgml,v 1.11 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -95,7 +95,7 @@ NOTICE: BEGIN: already a transaction in progress </title> <para> - By default, <productname>PostgreSQL</productname> executes transactions + By default, <productname>Postgres</productname> executes transactions in <firstterm>unchained mode</firstterm> (also known as <quote>autocommit</quote> in other database systems). @@ -116,7 +116,7 @@ NOTICE: BEGIN: already a transaction in progress <para> The default transaction isolation level in - <productname>PostgreSQL</productname> + <productname>Postgres</productname> is READ COMMITTED, where queries inside the transaction see only changes committed before query execution. So, you have to use <command>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE</command> @@ -128,7 +128,7 @@ NOTICE: BEGIN: already a transaction in progress </para> <para> - If the transaction is committed, <productname>PostgreSQL</productname> + If the transaction is committed, <productname>Postgres</productname> will ensure either that all updates are done or else that none of them are done. Transactions have the standard <acronym>ACID</acronym> (atomic, consistent, isolatable, and durable) property. @@ -185,7 +185,7 @@ BEGIN WORK; <para> <command>BEGIN</command> - is a <productname>PostgreSQL</productname> language extension. + is a <productname>Postgres</productname> language extension. There is no explicit <command>BEGIN</command> command in <acronym>SQL92</acronym>; transaction initiation is always implicit and it terminates either diff --git a/doc/src/sgml/ref/create_database.sgml b/doc/src/sgml/ref/create_database.sgml index c8de74eee5..00dae61b2b 100644 --- a/doc/src/sgml/ref/create_database.sgml +++ b/doc/src/sgml/ref/create_database.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.12 2000/03/26 18:32:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_database.sgml,v 1.13 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -157,7 +157,7 @@ CREATE DATABASE <replaceable class="PARAMETER">name</replaceable> [ WITH LOCATIO </title> <para> <command>CREATE DATABASE</command> creates a new - <productname>PostgreSQL</productname> database. + <productname>Postgres</productname> database. The creator becomes the owner of the new database. </para> diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml index 3333171319..708d0745ee 100644 --- a/doc/src/sgml/ref/create_function.sgml +++ b/doc/src/sgml/ref/create_function.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.12 2000/03/26 18:32:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_function.sgml,v 1.13 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -20,26 +20,24 @@ Postgres documentation </refnamediv> <refsynopsisdiv> <refsynopsisdivinfo> - <date>1999-10-02</date> + <date>2000-03-25</date> </refsynopsisdivinfo> <synopsis> CREATE FUNCTION <replaceable class="parameter">name</replaceable> ( [ <replaceable class="parameter">ftype</replaceable> [, ...] ] ) RETURNS <replaceable class="parameter">rtype</replaceable> - [ WITH ( <replaceable class="parameter">attribute</replaceable> [, ...] ) ] AS <replaceable class="parameter">definition</replaceable> LANGUAGE '<replaceable class="parameter">langname</replaceable>' - - + [ WITH ( <replaceable class="parameter">attribute</replaceable> [, ...] ) ] CREATE FUNCTION <replaceable class="parameter">name</replaceable> ( [ <replaceable class="parameter">ftype</replaceable> [, ...] ] ) RETURNS <replaceable class="parameter">rtype</replaceable> - [ WITH ( <replaceable class="parameter">attribute</replaceable> [, ...] ) ] AS <replaceable class="parameter">obj_file</replaceable> , <replaceable class="parameter">link_symbol</replaceable> LANGUAGE 'C' + [ WITH ( <replaceable class="parameter">attribute</replaceable> [, ...] ) ] </synopsis> <refsect2 id="R2-SQL-CREATEFUNCTION-1"> <refsect2info> - <date>1998-09-09</date> + <date>2000-03-25</date> </refsect2info> <title> Inputs @@ -143,7 +141,7 @@ CREATE FUNCTION <replaceable class="parameter">name</replaceable> ( [ <replaceab <refsect2 id="R2-SQL-CREATEFUNCTION-2"> <refsect2info> - <date>1998-09-09</date> + <date>2000-03-25</date> </refsect2info> <title> Outputs @@ -168,7 +166,7 @@ CREATE <refsect1 id="R1-SQL-CREATEFUNCTION-1"> <refsect1info> - <date>1998-09-09</date> + <date>2000-03-25</date> </refsect1info> <title> Description @@ -177,28 +175,29 @@ CREATE <command>CREATE FUNCTION</command> allows a <productname>Postgres</productname> user to register a function - with a database. Subsequently, this user is treated as the + with a database. Subsequently, this user is considered the owner of the function. </para> <refsect2 id="R2-SQL-CREATEFUNCTION-3"> <refsect2info> - <date>1998-09-09</date> + <date>2000-03-25</date> </refsect2info> <title> Notes </title> + <para> - Refer to the chapter in - the <citetitle>PostgreSQL Programmer's Guide</citetitle> - on extending + Refer to the chapter in the + <citetitle>PostgreSQL Programmer's Guide</citetitle> + on the topic of extending <productname>Postgres</productname> via functions for further information on writing external functions. </para> <para> Use <command>DROP FUNCTION</command> - to drop user-defined functions. + to remove user-defined functions. </para> <para> @@ -207,7 +206,17 @@ CREATE so long as they have distinct argument types. This facility must be used with caution for <literal>internal</literal> and C-language functions, however. - </para> + </para> + + <para> + The full <acronym>SQL92</acronym> type syntax is allowed for + input arguments and return value. However, some details of the + type specification (e.g. the precision field for + <type>numeric</type> types) are the responsibility of the + underlying function implementation and are silently swallowed + (e.g. not recognized or + enforced) by the <command>CREATE FUNCTION</command> command. + </para> <para> Two <literal>internal</literal> @@ -242,18 +251,18 @@ CREATE <para> To create a simple SQL function: -<programlisting> + <programlisting> CREATE FUNCTION one() RETURNS int4 AS 'SELECT 1 AS RESULT' LANGUAGE 'sql'; SELECT one() AS answer; -<computeroutput> + <computeroutput> answer -------- 1 -</computeroutput> -</programlisting> + </computeroutput> + </programlisting> </para> <para> @@ -317,7 +326,7 @@ Point * complex_to_point (Complex *z) <refsect2 id="R2-SQL-CREATEFUNCTION-4"> <refsect2info> - <date>1998-04-15</date> + <date>2000-03-25</date> </refsect2info> <title> SQL92 @@ -331,7 +340,7 @@ Point * complex_to_point (Complex *z) <refsect2 id="R2-SQL-CREATEFUNCTION-5"> <refsect2info> - <date>1998-09-09</date> + <date>2000-03-25</date> </refsect2info> <title> SQL/PSM @@ -364,7 +373,7 @@ CREATE FUNCTION <replaceable class="parameter">name</replaceable> <!-- Keep this comment at the end of the file Local variables: -mode: sgml +mode:sgml sgml-omittag:nil sgml-shorttag:t sgml-minimize-attributes:nil @@ -374,7 +383,7 @@ 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-catalogs:("/usr/lib/sgml/catalog") sgml-local-ecat-files:nil End: --> diff --git a/doc/src/sgml/ref/create_group.sgml b/doc/src/sgml/ref/create_group.sgml index 5202372301..a512d2ff12 100644 --- a/doc/src/sgml/ref/create_group.sgml +++ b/doc/src/sgml/ref/create_group.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_group.sgml,v 1.1 2000/01/14 22:11:32 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_group.sgml,v 1.2 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -53,7 +53,7 @@ CREATE GROUP <replaceable class="PARAMETER">name</replaceable> <listitem> <para> The <literal>SYSID</literal> clause can be used to choose - the <productname>PostgreSQL</productname> group id of the new + the <productname>Postgres</productname> group id of the new group. It is not necessary to do so, however. </para> <para> diff --git a/doc/src/sgml/ref/create_operator.sgml b/doc/src/sgml/ref/create_operator.sgml index 36d791d2a7..c920822224 100644 --- a/doc/src/sgml/ref/create_operator.sgml +++ b/doc/src/sgml/ref/create_operator.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_operator.sgml,v 1.12 2000/03/18 18:03:12 tgl Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_operator.sgml,v 1.13 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -20,7 +20,7 @@ Postgres documentation </refnamediv> <refsynopsisdiv> <refsynopsisdivinfo> - <date>1999-07-20</date> + <date>2000-03-25</date> </refsynopsisdivinfo> <synopsis> CREATE OPERATOR <replaceable>name</replaceable> ( PROCEDURE = <replaceable class="parameter">func_name</replaceable> @@ -32,7 +32,7 @@ CREATE OPERATOR <replaceable>name</replaceable> ( PROCEDURE = <replaceable class <refsect2 id="R2-SQL-CREATEOPERATOR-1"> <refsect2info> - <date>1999-04-14</date> + <date>2000-03-25</date> </refsect2info> <title> Inputs @@ -138,7 +138,7 @@ CREATE OPERATOR <replaceable>name</replaceable> ( PROCEDURE = <replaceable class <refsect2 id="R2-SQL-CREATEOPERATOR-2"> <refsect2info> - <date>1999-04-14</date> + <date>2000-03-25</date> </refsect2info> <title> Outputs @@ -162,7 +162,7 @@ CREATE <refsect1 id="R1-SQL-CREATEOPERATOR-1"> <refsect1info> - <date>1999-04-14</date> + <date>2000-03-25</date> </refsect1info> <title> Description @@ -248,13 +248,13 @@ CREATE Hence, the query optimizer could freely convert: <programlisting> -"0,0,1,1"::box >>> MYBOXES.description +box '((0,0),(1,1))' >>> MYBOXES.description </programlisting> to <programlisting> -MYBOXES.description <<< "0,0,1,1"::box +MYBOXES.description <<< box '((0,0),(1,1))' </programlisting> </para> <para> @@ -269,11 +269,11 @@ MYBOXES.description <<< "0,0,1,1"::box equal, !==. The negator link allows the query optimizer to simplify <programlisting> -NOT MYBOXES.description === "0,0,1,1"::box +NOT MYBOXES.description === box '((0,0),(1,1))' </programlisting> to <programlisting> -MYBOXES.description !== "0,0,1,1"::box +MYBOXES.description !== box '((0,0),(1,1))' </programlisting> </para> <para> @@ -331,7 +331,7 @@ MYBOXES.description !== "0,0,1,1"::box The RESTRICT and JOIN options assist the query optimizer in estimating result sizes. If a clause of the form: <programlisting> -MYBOXES.description <<< "0,0,1,1"::box +MYBOXES.description <<< box '((0,0),(1,1))' </programlisting> is present in the qualification, then <productname>Postgres</productname> may have to @@ -342,7 +342,7 @@ MYBOXES.description <<< "0,0,1,1"::box <command>CREATE FUNCTION</command>) which accepts arguments of the correct data types and returns a floating point number. The query optimizer simply calls this function, passing the - parameter "0,0,1,1" and multiplies the result by the relation + parameter <literal>((0,0),(1,1))</literal> and multiplies the result by the relation size to get the expected number of instances. </para> <para> @@ -356,11 +356,11 @@ MYBOXES.description <<< "0,0,1,1"::box <para> The difference between the function <programlisting> -my_procedure_1 (MYBOXES.description, "0,0,1,1"::box) +my_procedure_1 (MYBOXES.description, box '((0,0),(1,1))') </programlisting> and the operator <programlisting> -MYBOXES.description === "0,0,1,1"::box +MYBOXES.description === box '((0,0),(1,1))' </programlisting> is that <productname>Postgres</productname> attempts to optimize operators and can @@ -373,7 +373,7 @@ MYBOXES.description === "0,0,1,1"::box <refsect2 id="R2-SQL-CREATEOPERATOR-3"> <refsect2info> - <date>1999-04-14</date> + <date>2000-03-25</date> </refsect2info> <title> Notes @@ -418,7 +418,7 @@ CREATE OPERATOR === ( <refsect2 id="R2-SQL-CREATEOPERATOR-4"> <refsect2info> - <date>1999-04-14</date> + <date>2000-03-25</date> </refsect2info> <title> SQL92 diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index 9a25bc1b5e..5d85c3b157 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table.sgml,v 1.17 1999/07/22 15:09:08 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table.sgml,v 1.18 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -20,7 +20,7 @@ Postgres documentation </refnamediv> <refsynopsisdiv> <refsynopsisdivinfo> - <date>1999-07-20</date> + <date>2000-03-25</date> </refsynopsisdivinfo> <synopsis> CREATE [ TEMPORARY | TEMP ] TABLE <replaceable class="PARAMETER">table</replaceable> ( @@ -35,9 +35,6 @@ CREATE [ TEMPORARY | TEMP ] TABLE <replaceable class="PARAMETER">table</replacea </synopsis> <refsect2 id="R2-SQL-CREATETABLE-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Inputs </title> @@ -158,9 +155,6 @@ CREATE [ TEMPORARY | TEMP ] TABLE <replaceable class="PARAMETER">table</replacea </refsect2> <refsect2 id="R2-SQL-CREATETABLE-2"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Outputs </title> @@ -212,9 +206,6 @@ ERROR: DEFAULT: type mismatched </refsynopsisdiv> <refsect1 id="R1-SQL-CREATETABLE-1"> - <refsect1info> - <date>1998-09-11</date> - </refsect1info> <title> Description </title> @@ -272,9 +263,6 @@ ERROR: DEFAULT: type mismatched </refsect1> <refsect1 id="R1-SQL-DEFAULTCLAUSE-1"> - <refsect1info> - <date>1998-09-11</date> - </refsect1info> <title id="R1-SQL-DEFAULTCLAUSE-1-TITLE"> DEFAULT Clause </title> @@ -284,9 +272,6 @@ DEFAULT <replaceable class="PARAMETER">value</replaceable> </synopsis> </para> <refsect2 id="R2-SQL-DEFAULTCLAUSE-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Inputs </title> @@ -323,9 +308,6 @@ DEFAULT <replaceable class="PARAMETER">value</replaceable> </refsect2> <refsect2 id="R2-SQL-DEFAULTCLAUSE-2"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Outputs </title> @@ -335,9 +317,6 @@ DEFAULT <replaceable class="PARAMETER">value</replaceable> </refsect2> <refsect2 id="R2-SQL-DEFAULTCLAUSE-3"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Description </title> @@ -415,7 +394,7 @@ DEFAULT <replaceable class="PARAMETER">value</replaceable> </para> <para> - In the current release (v6.5), <productname>Postgres</productname> + In the current release (v7.0), <productname>Postgres</productname> evaluates all default expressions at the time the table is defined. Hence, functions which are "non-cacheable" such as <function>CURRENT_TIMESTAMP</function> may not produce the desired @@ -431,9 +410,6 @@ DEFAULT <replaceable class="PARAMETER">value</replaceable> </para> </refsect2> <refsect2 id="R2-SQL-DEFAULTCLAUSE-4"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Usage </title> @@ -467,9 +443,6 @@ CREATE TABLE distributors ( </refsect1> <refsect1 id="R1-SQL-COLUMNCONSTRAINT-1"> - <refsect1info> - <date>1998-09-11</date> - </refsect1info> <title id="R1-SQL-COLUMNCONSTRAINT-1-TITLE"> Column CONSTRAINT Clause </title> @@ -482,9 +455,6 @@ CREATE TABLE distributors ( </para> <refsect2 id="R2-SQL-COLUMNCONSTRAINT-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Inputs </title> @@ -561,9 +531,6 @@ CREATE TABLE distributors ( </refsect2> <refsect2 id="R2-SQL-COLUMNCONSTRAINT-2"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Description </title> @@ -601,21 +568,19 @@ CREATE TABLE distributors ( <member>UNIQUE</member> <member>CHECK</member> <member>NOT NULL</member> - </simplelist></para> + </simplelist> + </para> + <note> <para> - <productname>Postgres</productname> does not yet - (at release 6.5) support - REFERENCES integrity constraints. The parser - accepts the REFERENCES syntax but ignores the clause. + <productname>Postgres</productname> now + (new for v7.0) supports + REFERENCES integrity constraints. </para> </note> </refsect2> <refsect2 id="R2-SQL-NOTNULL-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> NOT NULL Constraint </title> @@ -630,9 +595,6 @@ CREATE TABLE distributors ( </para> <refsect3 id="R3-SQL-NOTNULL-1"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> Outputs </title> @@ -663,9 +625,6 @@ ERROR: ExecAppend: Fail to add null value in not null attribute "<replaceable c </refsect3> <refsect3 id="R3-SQL-NOTNULL-2"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> Description </title> @@ -674,9 +633,6 @@ ERROR: ExecAppend: Fail to add null value in not null attribute "<replaceable c </refsect3> <refsect3 id="R3-SQL-NOTNULL-3"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> Usage </title> @@ -697,9 +653,6 @@ CREATE TABLE distributors ( </refsect2> <refsect2 id="R2-SQL-UNIQUECLAUSE-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> UNIQUE Constraint </title> @@ -813,9 +766,6 @@ CREATE TABLE distributors ( </refsect2> <refsect2 id="R2-SQL-CHECK-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> The CHECK Constraint </title> @@ -849,9 +799,6 @@ CREATE TABLE distributors ( </refsect3> <refsect3 id="R3-SQL-CHECK-2"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> Outputs </title> @@ -900,9 +847,6 @@ ERROR: ExecAppend: rejected due to CHECK constraint "<replaceable class="parame </refsect2> <refsect2 id="R2-SQL-PRIMARYKEY-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> PRIMARY KEY Constraint </title> @@ -958,9 +902,6 @@ ERROR: Cannot insert a duplicate key into a unique index. </refsect3> <refsect3 id="R3-SQL-PRIMARYKEY-3"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> Notes </title> @@ -982,9 +923,6 @@ ERROR: Cannot insert a duplicate key into a unique index. </refsect1> <refsect1 id="R1-SQL-TABLECONSTRAINT-1"> - <refsect1info> - <date>1998-09-11</date> - </refsect1info> <title> Table CONSTRAINT Clause </title> @@ -995,9 +933,6 @@ ERROR: Cannot insert a duplicate key into a unique index. </synopsis> </para> <refsect2 id="R2-SQL-TABLECONSTRAINT-1"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Inputs </title> @@ -1035,9 +970,6 @@ ERROR: Cannot insert a duplicate key into a unique index. </refsect2> <refsect2 id="R2-SQL-TABLECONSTRAINT-2"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Outputs </title> @@ -1049,9 +981,6 @@ ERROR: Cannot insert a duplicate key into a unique index. </refsect2> <refsect2 id="R2-SQL-TABLECONSTRAINT-3"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Description </title> @@ -1067,22 +996,17 @@ ERROR: Cannot insert a duplicate key into a unique index. <member>FOREIGN KEY</member> </simplelist> </para> + <note> <para> - <productname>Postgres</productname> does not yet - (as of version 6.5) support FOREIGN KEY - integrity constraints. The parser understands the FOREIGN KEY syntax, - but only prints a notice and otherwise ignores the clause. - Foreign keys may be partially emulated by triggers (See the CREATE TRIGGER - statement). + <productname>Postgres</productname> now + supports FOREIGN KEY + integrity constraints (new for release 7.0). </para> </note> </refsect2> <refsect2 id="R2-SQL-UNIQUECLAUSE-4"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> UNIQUE Constraint </title> @@ -1174,9 +1098,6 @@ CREATE TABLE distributors ( </refsect2> <refsect2 id="R2-SQL-PRIMARYKEY-4"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> PRIMARY KEY Constraint </title> @@ -1375,9 +1296,6 @@ CREATE TABLE distributors ( </para> <refsect2 id="R2-SQL-CREATETABLE-3"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> Notes </title> @@ -1395,9 +1313,6 @@ CREATE TABLE distributors ( </title> <refsect2 id="R2-SQL-CREATETABLE-4"> - <refsect2info> - <date>1998-09-11</date> - </refsect2info> <title> SQL92 </title> @@ -1436,9 +1351,6 @@ CREATE TEMPORARY TABLE actors ( </para> <refsect3 id="R3-SQL-UNIQUECLAUSE-1"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> UNIQUE clause </title> @@ -1467,9 +1379,6 @@ CREATE TEMPORARY TABLE actors ( </refsect3> <refsect3 id="R3-SQL-NULL-1"> - <refsect3info> - <date>1998-12-24</date> - </refsect3info> <title> NULL clause </title> @@ -1485,9 +1394,6 @@ CREATE TEMPORARY TABLE actors ( </refsect3> <refsect3 id="R3-SQL-NOTNULL-4"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> NOT NULL clause </title> @@ -1510,9 +1416,6 @@ the column. Not our problem... - Thomas 1998-08-16 <REFSECT3 ID="R3-SQL-DEFAULTCLAUSE-1"> - <REFSECT3INFO> - <DATE>1998-09-11</DATE> - </REFSECT3INFO> <TITLE> DEFAULT clause </TITLE> @@ -1530,9 +1433,6 @@ the column. Not our problem... --> <refsect3 id="R3-SQL-CONSTRAINT-3"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> CONSTRAINT clause </title> @@ -1647,9 +1547,6 @@ CREATE ASSERTION name CHECK ( condition ) <refsect3 id="R3-SQL-CHECK-4"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> CHECK clause </title> @@ -1709,9 +1606,6 @@ ALTER DOMAIN cities </refsect3> <refsect3 id="R3-SQL-PRIMARYKEY-1"> - <refsect3info> - <date>1998-09-11</date> - </refsect3info> <title> PRIMARY KEY clause </title> diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml index da116628cc..e1364752e6 100644 --- a/doc/src/sgml/ref/create_trigger.sgml +++ b/doc/src/sgml/ref/create_trigger.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_trigger.sgml,v 1.8 1999/07/22 15:09:08 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_trigger.sgml,v 1.9 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -20,7 +20,7 @@ Postgres documentation </refnamediv> <refsynopsisdiv> <refsynopsisdivinfo> - <date>1999-07-20</date> + <date>2000-03-25</date> </refsynopsisdivinfo> <synopsis> CREATE TRIGGER <replaceable class="PARAMETER">name</replaceable> { BEFORE | AFTER } { <replaceable class="PARAMETER">event</replaceable> [OR ...] } @@ -152,7 +152,7 @@ CREATE Only the relation owner may create a trigger on this relation. </para> <para> - As of the current release (v6.4), STATEMENT triggers are not implemented. + As of the current release (v7.0), STATEMENT triggers are not implemented. </para> <para> Refer to <command>DROP TRIGGER</command> for information on how to @@ -217,11 +217,6 @@ CREATE TABLE distributors ( ); </programlisting> </para> - - <para> - However, foreign keys are not yet implemented (as of version 6.5) in - <productname>Postgres</productname>. - </para> </refsect2> </refsect1> </refentry> diff --git a/doc/src/sgml/ref/create_type.sgml b/doc/src/sgml/ref/create_type.sgml index 07c2617bf0..2bdcacba5d 100644 --- a/doc/src/sgml/ref/create_type.sgml +++ b/doc/src/sgml/ref/create_type.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_type.sgml,v 1.11 1999/08/06 13:50:30 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_type.sgml,v 1.12 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -289,8 +289,8 @@ CREATE A "regular" Postgres type can only be 8192 bytes in length. If you need a larger type you must create a Large Object type. The interface for these types is discussed - at length in - <citetitle>The PostgreSQL Programmer's Guide</citetitle>. + at length in the + <citetitle>PostgreSQL Programmer's Guide</citetitle>. The length of all large object types is always VARIABLE. </para> </refsect2> diff --git a/doc/src/sgml/ref/create_user.sgml b/doc/src/sgml/ref/create_user.sgml index 6994837751..ba389aebe7 100644 --- a/doc/src/sgml/ref/create_user.sgml +++ b/doc/src/sgml/ref/create_user.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_user.sgml,v 1.13 2000/01/14 22:11:32 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_user.sgml,v 1.14 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -56,7 +56,7 @@ CREATE USER <replaceable class="PARAMETER">username</replaceable> <listitem> <para> The <literal>SYSID</literal> clause can be used to choose - the <productname>PostgreSQL</productname> user id of the user + the <productname>Postgres</productname> user id of the user that is being created. It is not at all necessary that those match the <acronym>UNIX</acronym> user ids, but some people choose to keep the numbers the same. @@ -164,7 +164,7 @@ CREATE USER <replaceable class="PARAMETER">username</replaceable> </title> <para> CREATE USER will add a new user to an instance of - <productname>PostgreSQL</productname>. Refer to the adminstrator's + <productname>Postgres</productname>. Refer to the adminstrator's guide for information about managing users and authentication. You must be a database superuser to use this command. </para> @@ -173,7 +173,7 @@ CREATE USER <replaceable class="PARAMETER">username</replaceable> to change a user's password and privileges, and <xref linkend="SQL-DROPUSER" endterm="SQL-DROPUSER-title"> to remove a user. Use <command>ALTER GROUP</command> to add or remove the user from other groups. - <productname>PostgreSQL</productname> + <productname>Postgres</productname> comes with a script <xref linkend="APP-CREATEUSER" endterm="APP-CREATEUSER-title"> which has the same functionality as this command (in fact, it calls this command) diff --git a/doc/src/sgml/ref/create_view.sgml b/doc/src/sgml/ref/create_view.sgml index aa25b0746d..95fdece785 100644 --- a/doc/src/sgml/ref/create_view.sgml +++ b/doc/src/sgml/ref/create_view.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_view.sgml,v 1.8 2000/03/26 18:32:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_view.sgml,v 1.9 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -20,15 +20,15 @@ Postgres documentation </refnamediv> <refsynopsisdiv> <refsynopsisdivinfo> - <date>1999-07-20</date> + <date>2000-03-25</date> </refsynopsisdivinfo> <synopsis> CREATE VIEW <replaceable class="PARAMETER">view</replaceable> AS SELECT <replaceable class="PARAMETER">query</replaceable> </synopsis> <refsect2 id="R2-SQL-CREATEVIEW-1"> - <refsect2info> - <date>1998-09-21</date> + <refsect2info> + <date>2000-03-25</date> </refsect2info> <title> Inputs @@ -62,7 +62,7 @@ CREATE VIEW <replaceable class="PARAMETER">view</replaceable> AS SELECT <replace <refsect2 id="R2-SQL-CREATEVIEW-2"> <refsect2info> - <date>1998-09-21</date> + <date>2000-03-25</date> </refsect2info> <title> Outputs @@ -97,13 +97,15 @@ NOTICE create: attribute named "<replaceable class="parameter">column</replaceab <para> The view will be created having a column with an unknown type if you do not specify it. For example, the following command gives - an error: + a warning: <programlisting> CREATE VIEW vista AS SELECT 'Hello World' </programlisting> + whereas this command does not: + <programlisting> -CREATE VIEW vista AS SELECT 'Hello World'::text +CREATE VIEW vista AS SELECT text 'Hello World' </programlisting> </para> </listitem> @@ -115,7 +117,7 @@ CREATE VIEW vista AS SELECT 'Hello World'::text <refsect1 id="R1-SQL-CREATEVIEW-1"> <refsect1info> - <date>1998-09-21</date> + <date>2000-03-25</date> </refsect1info> <title> Description @@ -129,7 +131,7 @@ CREATE VIEW vista AS SELECT 'Hello World'::text <refsect2 id="R2-SQL-CREATEVIEW-3"> <refsect2info> - <date>1998-09-21</date> + <date>2000-03-25</date> </refsect2info> <title> Notes @@ -176,7 +178,7 @@ SELECT * FROM kinds; <refsect2 id="R2-SQL-CREATEVIEW-5"> <refsect2info> - <date>1998-09-21</date> + <date>2000-03-25</date> </refsect2info> <title> SQL92 diff --git a/doc/src/sgml/ref/createdb.sgml b/doc/src/sgml/ref/createdb.sgml index 15b9c14bde..0bdddc0144 100644 --- a/doc/src/sgml/ref/createdb.sgml +++ b/doc/src/sgml/ref/createdb.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/createdb.sgml,v 1.9 2000/02/10 20:08:55 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/createdb.sgml,v 1.10 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>createdb</application> </refname> <refpurpose> - Create a new <productname>PostgreSQL</productname> database + Create a new <productname>Postgres</productname> database </refpurpose> </refnamediv> <refsynopsisdiv> @@ -120,7 +120,7 @@ createdb [ <replaceable class="parameter">options</replaceable> ] <replaceable c <listitem> <para> Specifies the name of the database to be created. The name must be - unique among all <productname>PostgreSQL</productname> databases in this installation. + unique among all <productname>Postgres</productname> databases in this installation. The default is to create a database with the same name as the current system user. </para> @@ -196,7 +196,7 @@ createdb [ <replaceable class="parameter">options</replaceable> ] <replaceable c Description </title> <para> - <application>createdb</application> creates a new <productname>PostgreSQL</productname> + <application>createdb</application> creates a new <productname>Postgres</productname> database. The user who executes this command becomes the database owner. </para> @@ -204,7 +204,7 @@ createdb [ <replaceable class="parameter">options</replaceable> ] <replaceable c <application>createdb</application> is a shell script wrapper around the <acronym>SQL</acronym> command <xref linkend="SQL-CREATEDATABASE" endterm="SQL-CREATEDATABASE-title"> via - the <productname>PostgreSQL</productname> interactive terminal + the <productname>Postgres</productname> interactive terminal <xref linkend="APP-PSQL" endterm="APP-PSQL-title">. Thus, there is nothing special about creating databases via this or other methods. This means that the <application>psql</application> must be found by the script and that diff --git a/doc/src/sgml/ref/createlang.sgml b/doc/src/sgml/ref/createlang.sgml index 71de026884..3cdd4c6731 100644 --- a/doc/src/sgml/ref/createlang.sgml +++ b/doc/src/sgml/ref/createlang.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/createlang.sgml,v 1.4 2000/01/19 20:08:22 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/createlang.sgml,v 1.5 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>createlang</application> </refname> <refpurpose> - Add a new programming language to a <productname>PostgreSQL</productname> database + Add a new programming language to a <productname>Postgres</productname> database </refpurpose> </refnamediv> <refsynopsisdiv> @@ -145,7 +145,7 @@ createlang [ <replaceable class="parameter">connection options</replaceable> ] - <para> <application>createlang</application> is a utility for adding a new - programming language to a <productname>PostgreSQL</productname> database. + programming language to a <productname>Postgres</productname> database. <application>createlang</application> currently accepts two languages, <literal>plsql</literal> and <literal>pltcl</literal>. </para> diff --git a/doc/src/sgml/ref/createuser.sgml b/doc/src/sgml/ref/createuser.sgml index cf8ff8dfee..bcecbe1fa8 100644 --- a/doc/src/sgml/ref/createuser.sgml +++ b/doc/src/sgml/ref/createuser.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/createuser.sgml,v 1.8 2000/01/12 19:36:34 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/createuser.sgml,v 1.9 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>createuser</application> </refname> <refpurpose> - Create a new <productname>PostgreSQL</productname> user + Create a new <productname>Postgres</productname> user </refpurpose> </refnamediv> <refsynopsisdiv> @@ -139,8 +139,8 @@ createuser [ <replaceable class="parameter">options</replaceable> ] [ <replaceab <term><replaceable class="parameter">username</replaceable></term> <listitem> <para> - Specifies the name of the <productname>PostgreSQL</productname> user to be created. - This name must be unique among all <productname>PostgreSQL</productname> users. + Specifies the name of the <productname>Postgres</productname> user to be created. + This name must be unique among all <productname>Postgres</productname> users. </para> </listitem> </varlistentry> @@ -203,7 +203,7 @@ createuser [ <replaceable class="parameter">options</replaceable> ] [ <replaceab </title> <para> <application>createuser</application> creates a - new <productname>PostgreSQL</productname> user. + new <productname>Postgres</productname> user. Only users with <literal>usesuper</literal> set in the <literal>pg_shadow</literal> class can create new <productname>Postgres</productname> users. @@ -213,7 +213,7 @@ createuser [ <replaceable class="parameter">options</replaceable> ] [ <replaceab <application>createuser</application> is a shell script wrapper around the <acronym>SQL</acronym> command <xref linkend="SQL-CREATEUSER" endterm="SQL-CREATEUSER-title"> via - the <productname>PostgreSQL</productname> interactive terminal + the <productname>Postgres</productname> interactive terminal <xref linkend="APP-PSQL" endterm="APP-PSQL-title">. Thus, there is nothing special about creating users via this or other methods. This means that the <application>psql</application> must be found by the script and that diff --git a/doc/src/sgml/ref/drop_user.sgml b/doc/src/sgml/ref/drop_user.sgml index b2a96e0090..e5502d9eae 100644 --- a/doc/src/sgml/ref/drop_user.sgml +++ b/doc/src/sgml/ref/drop_user.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_user.sgml,v 1.10 2000/01/14 22:11:32 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_user.sgml,v 1.11 2000/03/27 17:14:42 thomas Exp $ Postgres documentation --> @@ -109,7 +109,7 @@ DROP USER: user "<replaceable class="parameter">name</replaceable>" owns databas Use <xref linkend="SQL-CREATEUSER" endterm="SQL-CREATEUSER-title"> to add new users, and <xref linkend="SQL-ALTERUSER" endterm="SQL-ALTERUSER-title"> to change a user's properties. - <productname>PostgreSQL</productname> + <productname>Postgres</productname> comes with a script <xref linkend="APP-DROPUSER" endterm="APP-DROPUSER-title"> which has the same functionality as this command (in fact, it calls this command) diff --git a/doc/src/sgml/ref/dropdb.sgml b/doc/src/sgml/ref/dropdb.sgml index c695e9c9e4..b699f0b847 100644 --- a/doc/src/sgml/ref/dropdb.sgml +++ b/doc/src/sgml/ref/dropdb.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/dropdb.sgml,v 1.2 1999/12/07 22:41:41 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/dropdb.sgml,v 1.3 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>dropdb</application> </refname> <refpurpose> - Remove an existing <productname>PostgreSQL</productname> database + Remove an existing <productname>Postgres</productname> database </refpurpose> </refnamediv> <refsynopsisdiv> @@ -109,7 +109,7 @@ dropdb [ <replaceable class="parameter">options</replaceable> ] <replaceable cla <listitem> <para> Specifies the name of the database to be removed. The database - must be one of the existing <productname>PostgreSQL</productname> databases + must be one of the existing <productname>Postgres</productname> databases in this installation. </para> </listitem> @@ -165,7 +165,7 @@ dropdb [ <replaceable class="parameter">options</replaceable> ] <replaceable cla </title> <para> <application>dropdb</application> destroys an existing - <productname>PostgreSQL</productname> database. + <productname>Postgres</productname> database. The user who executes this command must be a database superuser or the owner of the database. </para> @@ -174,7 +174,7 @@ dropdb [ <replaceable class="parameter">options</replaceable> ] <replaceable cla <application>dropdb</application> is a shell script wrapper around the <acronym>SQL</acronym> command <xref linkend="SQL-DROPDATABASE" endterm="SQL-DROPDATABASE-title"> via - the <productname>PostgreSQL</productname> interactive terminal + the <productname>Postgres</productname> interactive terminal <xref linkend="APP-PSQL" endterm="APP-PSQL-title">. Thus, there is nothing special about dropping databases via this or other methods. This means that the <application>psql</application> must be found by the script and that diff --git a/doc/src/sgml/ref/droplang.sgml b/doc/src/sgml/ref/droplang.sgml index 65b2cea8bd..a2ec00019d 100644 --- a/doc/src/sgml/ref/droplang.sgml +++ b/doc/src/sgml/ref/droplang.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/droplang.sgml,v 1.2 2000/01/19 20:08:22 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/droplang.sgml,v 1.3 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>droplang</application> </refname> <refpurpose> - Remove a programming language from a <productname>PostgreSQL</productname> database + Remove a programming language from a <productname>Postgres</productname> database </refpurpose> </refnamediv> <refsynopsisdiv> @@ -146,7 +146,7 @@ droplang [ <replaceable class="parameter">connection options</replaceable> ] --l <para> <application>droplang</application> is a utility for removing an existing programming language from a - <productname>PostgreSQL</productname> database. + <productname>Postgres</productname> database. <application>droplang</application> currently accepts two languages, <literal>plsql</literal> and <literal>pltcl</literal>. </para> diff --git a/doc/src/sgml/ref/dropuser.sgml b/doc/src/sgml/ref/dropuser.sgml index 398bde28e1..889fd5b9a3 100644 --- a/doc/src/sgml/ref/dropuser.sgml +++ b/doc/src/sgml/ref/dropuser.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/dropuser.sgml,v 1.3 2000/01/12 19:36:34 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/dropuser.sgml,v 1.4 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -90,7 +90,7 @@ dropuser [ <replaceable class="parameter">options</replaceable> ] [ <replaceable <term><replaceable class="parameter">username</replaceable></term> <listitem> <para> - Specifies the name of the <productname>PostgreSQL</productname> user to be removed. + Specifies the name of the <productname>Postgres</productname> user to be removed. This name must exist in the <productname>Postgres</productname> installation. You will be prompted for a name if none is specified on the command line. </para> @@ -153,18 +153,18 @@ dropuser [ <replaceable class="parameter">options</replaceable> ] [ <replaceable </title> <para> <application>dropuser</application> removes an existing - <productname>PostgreSQL</productname> user + <productname>Postgres</productname> user <emphasis>and</emphasis> the databases which that user owned. Only users with <literal>usesuper</literal> set in the <literal>pg_shadow</literal> class can destroy - <productname>PostgreSQL</productname> users. + <productname>Postgres</productname> users. </para> <para> <application>dropuser</application> is a shell script wrapper around the <acronym>SQL</acronym> command <xref linkend="SQL-DROPUSER" endterm="SQL-DROPUSER-title"> via - the <productname>PostgreSQL</productname> interactive terminal + the <productname>Postgres</productname> interactive terminal <xref linkend="APP-PSQL" endterm="APP-PSQL-title">. Thus, there is nothing special about removing users via this or other methods. This means that the <application>psql</application> must be found by the script and that diff --git a/doc/src/sgml/ref/end.sgml b/doc/src/sgml/ref/end.sgml index 5292b97e97..10f9f54f13 100644 --- a/doc/src/sgml/ref/end.sgml +++ b/doc/src/sgml/ref/end.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/end.sgml,v 1.2 2000/01/29 16:58:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/end.sgml,v 1.3 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -94,8 +94,8 @@ NOTICE: COMMIT: no transaction in progress </title> <para> - <command>END</command> is a <productname>PostgreSQL</productname> - synonym for + <command>END</command> is a <productname>Postgres</productname> + extension, and is a synonym for the SQL92-compatible <xref linkend="sql-commit-title" endterm="sql-commit-title">. </para> diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index 19e7674b4f..48040c9824 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/initdb.sgml,v 1.9 2000/01/20 21:50:54 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/initdb.sgml,v 1.10 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>initdb</application> </refname> <refpurpose> - Create a new <productname>PostgreSQL</productname> database installation + Create a new <productname>Postgres</productname> database installation </refpurpose> </refnamediv> <refsynopsisdiv> @@ -129,7 +129,7 @@ initdb [ --pgdata|-D <replaceable class="parameter">dbdir</replaceable> ] database in an existing database system, and don't touch anything else. This is useful when you need to upgrade your <literal>template1</literal> database using <application>initdb</application> - from a newer release of <productname>PostgreSQL</productname>, + from a newer release of <productname>Postgres</productname>, or when your <literal>template1</literal> database has become corrupted by some system problem. Normally the contents of <literal>template1</literal> @@ -199,7 +199,7 @@ initdb [ --pgdata|-D <replaceable class="parameter">dbdir</replaceable> ] </title> <para> <application>initdb</application> creates a new - <productname>PostgreSQL</productname> database system. + <productname>Postgres</productname> database system. A database system is a collection of databases that are all administered by the same Unix user and managed by a single postmaster. diff --git a/doc/src/sgml/ref/initlocation.sgml b/doc/src/sgml/ref/initlocation.sgml index e5228e8138..fa86a4041e 100644 --- a/doc/src/sgml/ref/initlocation.sgml +++ b/doc/src/sgml/ref/initlocation.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/initlocation.sgml,v 1.6 2000/03/26 18:32:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/initlocation.sgml,v 1.7 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>initlocation</application> </refname> <refpurpose> - Create a secondary <productname>PostgreSQL</productname> database storage area + Create a secondary <productname>Postgres</productname> database storage area </refpurpose> </refnamediv> <refsynopsisdiv> @@ -72,7 +72,7 @@ initlocation <replaceable class="parameter">directory</replaceable> </title> <para> <application>initlocation</application> - creates a new <productname>PostgreSQL</productname> secondary database storage area. + creates a new <productname>Postgres</productname> secondary database storage area. See the discussion under <xref linkend="SQL-CREATEDATABASE" endterm="SQL-CREATEDATABASE-title"> about how to manage and use secondary storage areas. If the argument does not contain a slash and is not valid as a path, it is assumed to be an environment variable, diff --git a/doc/src/sgml/ref/insert.sgml b/doc/src/sgml/ref/insert.sgml index 933a04f26a..27dedecd60 100644 --- a/doc/src/sgml/ref/insert.sgml +++ b/doc/src/sgml/ref/insert.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/insert.sgml,v 1.6 1999/07/22 15:09:12 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/insert.sgml,v 1.7 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -193,8 +193,8 @@ INSERT INTO films SELECT * FROM tmp; </para> <para> - Insert into arrays (refer to - <citetitle>The PostgreSQL User's Guide</citetitle> for further + Insert into arrays (refer to the + <citetitle>PostgreSQL User's Guide</citetitle> for further information about arrays): <programlisting> diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml index b6a0f0ea7e..f659f2009f 100644 --- a/doc/src/sgml/ref/pg_dump.sgml +++ b/doc/src/sgml/ref/pg_dump.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.14 2000/01/24 19:34:13 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_dump.sgml,v 1.15 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -99,7 +99,8 @@ pg_dump [ -h <replaceable class="parameter">host</replaceable> ] [ -p <replaceab Suppress double quotes around identifiers unless absolutely necessary. This may cause trouble loading this dumped data if there are reserved words used for identifiers. - This was the default behavior in pre-v6.4 <application>pg_dump</application>. + This was the default behavior for + <application>pg_dump</application> prior to v6.4. </para> </listitem> </varlistentry> diff --git a/doc/src/sgml/ref/pg_upgrade.sgml b/doc/src/sgml/ref/pg_upgrade.sgml index 7bb5167d82..948e76bad2 100644 --- a/doc/src/sgml/ref/pg_upgrade.sgml +++ b/doc/src/sgml/ref/pg_upgrade.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_upgrade.sgml,v 1.8 1999/09/28 15:59:10 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_upgrade.sgml,v 1.9 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -38,7 +38,7 @@ pg_upgrade [ -f <replaceable class="parameter">filename</replaceable> ] <replace <para> <application>pg_upgrade</application> is a utility for upgrading from a previous - PostgreSQL release without reloading all the data. + Postgres release without reloading all the data. Not all <productname>Postgres</productname> release transitions can be handled this way. Check the release notes for details on your installation. </para> diff --git a/doc/src/sgml/ref/pgadmin-ref.sgml b/doc/src/sgml/ref/pgadmin-ref.sgml index 988054f36b..1f7dcbd135 100644 --- a/doc/src/sgml/ref/pgadmin-ref.sgml +++ b/doc/src/sgml/ref/pgadmin-ref.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pgadmin-ref.sgml,v 1.5 2000/02/02 16:19:54 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pgadmin-ref.sgml,v 1.6 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -41,7 +41,7 @@ pgadmin [ <replaceable class="parameter">datasourcename</replaceable> [ <replace <term><replaceable class="PARAMETER">datasourcename</replaceable></term> <listitem> <para> - The name of an existing PostgreSQL ODBC System or User Data + The name of an existing <productname>Postgres</productname> ODBC System or User Data Source. </para> </listitem> diff --git a/doc/src/sgml/ref/postgres-ref.sgml b/doc/src/sgml/ref/postgres-ref.sgml index 96f9e64644..3fd0259c44 100644 --- a/doc/src/sgml/ref/postgres-ref.sgml +++ b/doc/src/sgml/ref/postgres-ref.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/postgres-ref.sgml,v 1.6 1999/08/06 13:50:31 thomas Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/postgres-ref.sgml,v 1.7 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -190,7 +190,7 @@ postgres [ -B <replaceable class="parameter">nBuffers</replaceable> ] [ -C ] [ - Dates are accepted by the backend in a wide variety of formats, and for input dates this switch mostly affects the interpretation for ambiguous cases. - See <citetitle>The PostgreSQL User's Guide</citetitle> + See the <citetitle>PostgreSQL User's Guide</citetitle> for more information. </para> </listitem> diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 700257e519..1a65ddaeee 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.29 2000/03/21 01:52:12 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.30 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -16,7 +16,7 @@ Postgres documentation <application>psql</application> </refname> <refpurpose> - <productname>PostgreSQL</productname> interactive terminal + <productname>Postgres</productname> interactive terminal </refpurpose> </refnamediv> @@ -36,8 +36,8 @@ Postgres documentation <para> <application>psql</application> is a terminal-based front-end to - <productname>PostgreSQL</productname>. It enables you to type in queries - interactively, issue them to <productname>PostgreSQL</productname>, and see + <productname>Postgres</productname>. It enables you to type in queries + interactively, issue them to <productname>Postgres</productname>, and see the query results. Alternatively, input can be from a file. In addition, it provides a number of meta-commands and various shell-like features to facilitate writing scripts and automating a wide @@ -63,7 +63,7 @@ Postgres documentation <title>Connecting To A Database</title> <para> - <application>psql</application> is a regular <productname>PostgreSQL</productname> + <application>psql</application> is a regular <productname>Postgres</productname> client application. In order to connect to a database you need to know the name of your target database, the hostname and port number of the server and what user name you want to connect as. <application>psql</application> can be @@ -316,7 +316,7 @@ testdb=> <term><literal>\copyright</literal></term> <listitem> <para> - Shows the copyright and distribution terms of <application>PostgreSQL</application>. + Shows the copyright and distribution terms of <application>Postgres</application>. </para> </listitem> </varlistentry> @@ -387,7 +387,7 @@ testdb=> <note> <para> - <productname>PostgreSQL</productname> stores the object descriptions in the + <productname>Postgres</productname> stores the object descriptions in the pg_description system table. </para> </note> @@ -637,7 +637,7 @@ Tue Oct 26 21:40:57 CEST 1999 <para> List all the databases in the server as well as their owners. Append a <quote>+</quote> to the command name to see any descriptions - for the databases as well. If your <productname>PostgreSQL</productname> + for the databases as well. If your <productname>Postgres</productname> installation was compiled with multibyte encoding support, the encoding scheme of each database is shown as well. @@ -677,7 +677,7 @@ Tue Oct 26 21:40:57 CEST 1999 <listitem> <para> - Stores the file into a <productname>PostgreSQL</productname> <quote>large object</quote>. + Stores the file into a <productname>Postgres</productname> <quote>large object</quote>. Optionally, it associates the given comment with the object. Example: <programlisting> foo=> <userinput>\lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'</userinput> @@ -709,7 +709,7 @@ lo_import 152801 <term><literal>\lo_list</literal></term> <listitem> <para> - Shows a list of all <productname>PostgreSQL</productname> <quote>large + Shows a list of all <productname>Postgres</productname> <quote>large objects</quote> currently stored in the database along with their owners. </para> </listitem> @@ -1674,7 +1674,7 @@ bar <listitem> <para> When this variable is set and a backslash command queries the database, the query - is first shown. This way you can study the <productname>PostgreSQL</productname> + is first shown. This way you can study the <productname>Postgres</productname> internals and provide similar functionality in your own programs. If you set the variable to the value <quote>noexec</quote>, the queries are just shown but are not actually sent to the backend and executed. @@ -1770,7 +1770,7 @@ bar <term><envar>LO_TRANSACTION</envar></term> <listitem> <para> - If you use the <productname>PostgreSQL</productname> large object + If you use the <productname>Postgres</productname> large object interface to specially store data that does not fit into one tuple, all the operations must be contained in a transaction block. (See the documentation of the large object interface for more information.) Since @@ -1939,7 +1939,7 @@ testdb=> <userinput>\set content `sed -e "s/'/\\\\\\'/g" < my_file.txt`</userinp case you can escape a colon with a backslash to protect it from interpretation. (The colon syntax for variables is standard <acronym>SQL</acronym> for embedded query languages, such as <application>ecpg</application>. The colon syntax for - array slices and type casts are <productname>PostgreSQL</productname> extensions, + array slices and type casts are <productname>Postgres</productname> extensions, hence the conflict.) </para> @@ -2111,7 +2111,7 @@ $endif <para> If you have the readline library installed but <application>psql</application> - does not seem to use it, you must make sure that <productname>PostgreSQL</productname>'s + does not seem to use it, you must make sure that <productname>Postgres</productname>'s top-level <filename>configure</filename> script finds it. <filename>configure</filename> needs to find both the library <filename>libreadline.a</filename> (or a shared library equivalent) @@ -2145,7 +2145,7 @@ $ ./configure --with-includes=/opt/gnu/include --with-libs=/opt/gnu/lib ... <para> This section only shows a few examples specific to <application>psql</application>. If you want to learn <acronym>SQL</acronym> or get familiar with - <productname>PostgreSQL</productname>, you might wish to read the Tutorial that + <productname>Postgres</productname>, you might wish to read the Tutorial that is included in the distribution. </para> </note> diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 2aa6b8369b..ab379f72f6 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.27 2000/03/26 18:32:27 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.28 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -419,13 +419,15 @@ SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen; </programlisting></para> <para> - From release 6.4 of PostgreSQL, it is also possible to ORDER BY - arbitrary expressions, including fields that do not appear in the + It is also possible to ORDER BY + arbitrary expressions (an extension to SQL92), + including fields that do not appear in the SELECT result list. - Thus the following statement is now legal: + Thus the following statement is legal: <programlisting> SELECT name FROM distributors ORDER BY code; </programlisting> + Note that if an ORDER BY item is a simple name that matches both a result column name and an input column name, ORDER BY will interpret it as the result column name. This is the opposite of the choice that @@ -581,7 +583,7 @@ SELECT name FROM distributors ORDER BY code; </para> <para> - As of PostgreSQL 7.0, the + As of <productname>Postgres</productname> 7.0, the query optimizer takes LIMIT into account when generating a query plan, so you are very likely to get different plans (yielding different row orders) depending on what you give for LIMIT and OFFSET. Thus, using diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml index a730807015..1b4a1eed29 100644 --- a/doc/src/sgml/ref/vacuumdb.sgml +++ b/doc/src/sgml/ref/vacuumdb.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/vacuumdb.sgml,v 1.7 1999/12/18 08:34:49 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/vacuumdb.sgml,v 1.8 2000/03/27 17:14:43 thomas Exp $ Postgres documentation --> @@ -15,7 +15,7 @@ Postgres documentation <application>vacuumdb</application> </refname> <refpurpose> - Clean and analyze a <productname>PostgreSQL</productname> database + Clean and analyze a <productname>Postgres</productname> database </refpurpose> </refnamediv> <refsynopsisdiv> @@ -210,7 +210,7 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ - <para> <application>vacuumdb</application> is a utility for cleaning a - <productname>PostgreSQL</productname> database. + <productname>Postgres</productname> database. <application>vacuumdb</application> will also generate internal statistics used by the <productname>Postgres</productname> query optimizer. </para> @@ -219,7 +219,7 @@ vacuumdb [ <replaceable class="parameter">connection options</replaceable> ] [ - <application>vacuumdb</application> is a shell script wrapper around the backend command <xref linkend="SQL-VACUUM" endterm="SQL-VACUUM-title"> via - the <productname>PostgreSQL</productname> interactive terminal + the <productname>Postgres</productname> interactive terminal <xref linkend="APP-PSQL" endterm="APP-PSQL-title">. There is no effective difference between vacuuming databases via this or other methods. <application>psql</application> must be found by the script and