aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/datatype.sgml487
-rw-r--r--doc/src/sgml/func.sgml129
-rw-r--r--doc/src/sgml/syntax.sgml4
3 files changed, 356 insertions, 264 deletions
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index a9ba42de140..c0f77a2ab47 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -1,17 +1,10 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.47 2001/01/13 18:34:51 petere Exp $
-->
<chapter id="datatype">
<title id="datatype-title">Data Types</title>
- <abstract>
- <para>
- Describes the built-in data types available in
- <productname>Postgres</productname>.
- </para>
- </abstract>
-
<para>
<productname>Postgres</productname> has a rich set of native data
types available to users.
@@ -20,229 +13,229 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe
</para>
<para>
- In the context of data types, the following sections will discuss
- <acronym>SQL</acronym> standards compliance, porting issues, and usage.
-
- Some <productname>Postgres</productname> types correspond directly to
- <acronym>SQL92</acronym>-compatible types. In other
- cases, data types defined by <acronym>SQL92</acronym> syntax are mapped directly
- into native <productname>Postgres</productname> types.
-
- Many of the built-in types have obvious external formats. However, several
- types are either unique to <productname>Postgres</productname>,
- such as open and closed paths, or have
- several possibilities for formats, such as the date and time types.
+ <xref linkend="datatype-table"> shows all general-purpose data types
+ available to users. Most of the alternative names listed in the
+ <quote>Aliases</quote> column are the names used internally by
+ <productname>Postgres</productname> for historical reasons. In
+ addition, some internally used or deprecated types are available,
+ but they are not documented here. Many of the built-in types have
+ obvious external formats. However, several types are either unique
+ to <productname>Postgres</productname>, such as open and closed
+ paths, or have several possibilities for formats, such as the date
+ and time types.
</para>
<para>
- <table tocentry="1">
+ <table id="datatype-table">
<title><productname>Postgres</productname> Data Types</title>
<titleabbrev>Data Types</titleabbrev>
<tgroup cols="3">
<thead>
<row>
- <entry><productname>Postgres</productname> Type</entry>
- <entry><acronym>SQL92</acronym> or <acronym>SQL99</acronym> Type</entry>
+ <entry>Type Name</entry>
+ <entry>Aliases</entry>
<entry>Description</entry>
</row>
</thead>
+
<tbody>
<row>
- <entry>bool</entry>
- <entry>boolean</entry>
- <entry>logical boolean (true/false)</entry>
+ <entry><type>bigint</type></entry>
+ <entry><type>int8</type></entry>
+ <entry>signed eight-byte integer</entry>
</row>
+
<row>
- <entry>box</entry>
+ <entry><type>bit</type></entry>
<entry></entry>
- <entry>rectangular box in 2D plane</entry>
+ <entry>fixed-length bit string</entry>
</row>
+
<row>
- <entry>char(n)</entry>
- <entry>character(n)</entry>
- <entry>fixed-length character string</entry>
+ <entry><type>bit varying(<replaceable>n</replaceable>)</type></entry>
+ <entry><type>varbit(<replaceable>n</replaceable>)</type></entry>
+ <entry>variable-length bit string</entry>
</row>
+
<row>
- <entry>cidr</entry>
- <entry></entry>
- <entry>IP network address</entry>
+ <entry><type>boolean</type></entry>
+ <entry><type>bool</type></entry>
+ <entry>logical boolean (true/false)</entry>
</row>
+
<row>
- <entry>circle</entry>
+ <entry><type>box</type></entry>
<entry></entry>
- <entry>circle in 2D plane</entry>
+ <entry>rectangular box in 2D plane</entry>
</row>
+
<row>
- <entry>date</entry>
- <entry>date</entry>
- <entry>calendar date without time of day</entry>
+ <entry><type>character(<replaceable>n</replaceable>)</type></entry>
+ <entry><type>char(<replaceable>n</replaceable>)</type></entry>
+ <entry>fixed-length character string</entry>
</row>
+
<row>
- <entry>decimal</entry>
- <entry>decimal(p,s)</entry>
- <entry>exact numeric with selectable precision</entry>
+ <entry><type>character varying(<replaceable>n</replaceable>)</type></entry>
+ <entry><type>varchar(<replaceable>n</replaceable>)</type></entry>
+ <entry>variable-length character string</entry>
</row>
+
<row>
- <entry>float4</entry>
- <entry>float(<replaceable>p</replaceable>), <replaceable>p</replaceable> < 7</entry>
- <entry>floating-point number with precision <replaceable>p</replaceable></entry>
+ <entry><type>cidr</type></entry>
+ <entry></entry>
+ <entry>IP network address</entry>
</row>
+
<row>
- <entry>float8</entry>
- <entry>float(<replaceable>p</replaceable>), 7 <= <replaceable>p</replaceable> < 16</entry>
- <entry>floating-point number with precision <replaceable>p</replaceable></entry>
+ <entry><type>circle</type></entry>
+ <entry></entry>
+ <entry>circle in 2D plane</entry>
</row>
+
<row>
- <entry>inet</entry>
+ <entry><type>date</type></entry>
<entry></entry>
- <entry>IP network or host address</entry>
+ <entry>calendar date (year, month, day)</entry>
</row>
+
<row>
- <entry>int2</entry>
- <entry>smallint</entry>
- <entry>signed two-byte integer</entry>
+ <entry><type>double precision</type></entry>
+ <entry><type>float8</type></entry>
+ <entry>double precision floating-point number</entry>
</row>
+
<row>
- <entry>int4</entry>
- <entry>int, integer</entry>
- <entry>signed 4-byte integer</entry>
+ <entry><type>inet</type></entry>
+ <entry></entry>
+ <entry>IP host address</entry>
</row>
+
<row>
- <entry>int8</entry>
- <entry></entry>
- <entry>signed 8-byte integer</entry>
+ <entry><type>integer</type></entry>
+ <entry><type>int</type>, <type>int4</type></entry>
+ <entry>signed four-byte integer</entry>
</row>
+
<row>
- <entry>interval</entry>
- <entry>interval</entry>
+ <entry><type>interval</type></entry>
+ <entry></entry>
<entry>general-use time span</entry>
</row>
+
<row>
- <entry>line</entry>
+ <entry><type>line</type></entry>
<entry></entry>
<entry>infinite line in 2D plane</entry>
</row>
+
<row>
- <entry>lseg</entry>
+ <entry><type>lseg</type></entry>
<entry></entry>
<entry>line segment in 2D plane</entry>
</row>
+
<row>
- <entry>money</entry>
- <entry>decimal(9,2)</entry>
- <entry>US-style currency</entry>
+ <entry><type>macaddr</type></entry>
+ <entry></entry>
+ <entry>MAC address</entry>
</row>
+
<row>
- <entry>numeric</entry>
- <entry>numeric(p,s)</entry>
- <entry>exact numeric with selectable precision</entry>
+ <entry><type>money</type></entry>
+ <entry></entry>
+ <entry>US-style currency</entry>
</row>
+
<row>
- <entry>path</entry>
- <entry></entry>
- <entry>open and closed geometric path in 2D plane</entry>
+ <entry><type>numeric(<replaceable>p</replaceable>, <replaceable>s</replaceable>)</type></entry>
+ <entry><type>decimal(<replaceable>p</replaceable>, <replaceable>s</replaceable>)</type></entry>
+ <entry>exact numeric with selectable precision</entry>
</row>
+
<row>
- <entry>point</entry>
+ <entry><type>oid</type></entry>
<entry></entry>
- <entry>geometric point in 2D plane</entry>
+ <entry>object identifier</entry>
</row>
+
<row>
- <entry>polygon</entry>
+ <entry><type>path</type></entry>
<entry></entry>
- <entry>closed geometric path in 2D plane</entry>
+ <entry>open and closed geometric path in 2D plane</entry>
</row>
+
<row>
- <entry>serial</entry>
+ <entry><type>point</type></entry>
<entry></entry>
- <entry>unique id for indexing and cross-reference</entry>
+ <entry>geometric point in 2D plane</entry>
</row>
+
<row>
- <entry>text</entry>
+ <entry><type>polygon</type></entry>
<entry></entry>
- <entry>variable-length character string</entry>
+ <entry>closed geometric path in 2D plane</entry>
</row>
+
<row>
- <entry>time</entry>
- <entry>time [ without time zone ]</entry>
- <entry>time of day</entry>
+ <entry><type>real</type></entry>
+ <entry><type>float4</type></entry>
+ <entry>single precision floating-point number</entry>
</row>
+
<row>
- <entry>timetz</entry>
- <entry>time with time zone</entry>
- <entry>time of day, including time zone</entry>
+ <entry><type>smallint</type></entry>
+ <entry><type>int2</type></entry>
+ <entry>signed two-byte integer</entry>
</row>
+
<row>
- <entry>timestamp</entry>
- <entry>timestamp [ with time zone ]</entry>
- <entry>date/time</entry>
+ <entry><type>serial</type></entry>
+ <entry></entry>
+ <entry>autoincrementing four-byte integer</entry>
</row>
+
<row>
- <entry>varchar(n)</entry>
- <entry>character varying(n)</entry>
+ <entry><type>text</type></entry>
+ <entry></entry>
<entry>variable-length character string</entry>
</row>
- </tbody>
- </tgroup>
- </table>
- </para>
-
- <para>
- <note>
- <para>
- The <type>cidr</type> and <type>inet</type> types are designed to handle any IP type
- but only ipv4 is handled in the current implementation.
- Everything here that talks about ipv4 will apply to ipv6 in a
- future release.
- </para>
- </note>
- </para>
- <para>
- <table tocentry="1">
- <title><productname>Postgres</productname> Function Constants</title>
- <titleabbrev>Constants</titleabbrev>
- <tgroup cols="3">
- <thead>
<row>
- <entry><productname>Postgres</productname> Function</entry>
- <entry><acronym>SQL92</acronym> Constant</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>date('now')</entry>
- <entry>current_date</entry>
- <entry>date of current transaction</entry>
+ <entry><type>time [ without time zone ]</type></entry>
+ <entry></entry>
+ <entry>time of day</entry>
</row>
+
<row>
- <entry>time('now')</entry>
- <entry>current_time</entry>
- <entry>time of current transaction</entry>
+ <entry><type>time with time zone</type></entry>
+ <entry></entry>
+ <entry>time of day, including time zone</entry>
</row>
+
<row>
- <entry>timestamp('now')</entry>
- <entry>current_timestamp</entry>
- <entry>date and time of current transaction</entry>
+ <entry><type>timestamp [ with time zone ]</type></entry>
+ <entry></entry>
+ <entry>date and time</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
- <para>
- <productname>Postgres</productname> has features at the forefront of
- <acronym>ORDBMS</acronym> development. In addition to
- <acronym>SQL99</acronym> conformance, substantial portions
- of <acronym>SQL92</acronym> are also supported.
- Although we strive for <acronym>SQL92</acronym> compliance,
- there are some aspects of the standard
- that are ill considered and which should not live through subsequent standards.
- <productname>Postgres</productname> will not make great efforts to
- conform to these features; however, these tend to apply in little-used
- or obsure cases, and a typical user is not likely to run into them.
- </para>
+ <note>
+ <title>Compatibility</title>
+ <para>
+ The following types (or spellings thereof) are specified by SQL:
+ <type>bit</type>, <type>bit varying</type>, <type>boolean</type>,
+ <type>char</type>, <type>character</type>, <type>character
+ varying</type>, <type>varchar</type>, <type>date</type>,
+ <type>double precision</type>, <type>integer</type>,
+ <type>interval</type>, <type>numeric</type>, <type>decimal</type>,
+ <type>real</type>, <type>smallint</type>, <type>time</type>,
+ <type>timestamp</type> (both with or without time zone).
+ </para>
+ </note>
<para>
Most of the input and output functions corresponding to the
@@ -259,19 +252,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe
Some of the input and output functions are not invertible. That is,
the result of an output function may lose precision when compared to
the original input.
-
- <note>
- <para>
- Floating point numbers are allowed to retain
- most of the intrinsic precision of the type (typically 15 digits for doubles,
- 6 digits for 4-byte floats).
- Other types with underlying floating point fields (e.g. geometric
- types) carry similar precision.
- </para>
- </note>
</para>
- <sect1 id="numeric-types">
+ <sect1 id="datatype-numeric">
<title>Numeric Types</title>
<para>
@@ -293,42 +276,32 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe
<entry>Range</entry>
</row>
</thead>
+
<tbody>
<row>
- <entry>decimal</entry>
- <entry>variable</entry>
- <entry>User-specified precision</entry>
- <entry>no limit</entry>
- </row>
- <row>
- <entry>float4</entry>
- <entry>4 bytes</entry>
- <entry>Variable-precision</entry>
- <entry>6 decimal places</entry>
- </row>
- <row>
- <entry>float8</entry>
- <entry>8 bytes</entry>
- <entry>Variable-precision</entry>
- <entry>15 decimal places</entry>
- </row>
- <row>
- <entry>int2</entry>
+ <entry>smallint</entry>
<entry>2 bytes</entry>
<entry>Fixed-precision</entry>
<entry>-32768 to +32767</entry>
</row>
<row>
- <entry>int4</entry>
+ <entry>integer</entry>
<entry>4 bytes</entry>
<entry>Usual choice for fixed-precision</entry>
<entry>-2147483648 to +2147483647</entry>
</row>
<row>
- <entry>int8</entry>
+ <entry>bigint</entry>
<entry>8 bytes</entry>
<entry>Very large range fixed-precision</entry>
- <entry>~18 decimal places</entry>
+ <entry>about 18 decimal places</entry>
+ </row>
+
+ <row>
+ <entry>decimal</entry>
+ <entry>variable</entry>
+ <entry>User-specified precision</entry>
+ <entry>no limit</entry>
</row>
<row>
<entry>numeric</entry>
@@ -336,6 +309,20 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe
<entry>User-specified precision</entry>
<entry>no limit</entry>
</row>
+
+ <row>
+ <entry>real</entry>
+ <entry>4 bytes</entry>
+ <entry>Variable-precision</entry>
+ <entry>6 decimal places</entry>
+ </row>
+ <row>
+ <entry>double precision</entry>
+ <entry>8 bytes</entry>
+ <entry>Variable-precision</entry>
+ <entry>15 decimal places</entry>
+ </row>
+
<row>
<entry>serial</entry>
<entry>4 bytes</entry>
@@ -353,11 +340,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe
</para>
<para>
- The <type>int8</type> type may not be available on all platforms since
+ The <type>bigint</type> type may not be available on all platforms since
it relies on compiler support for eight-byte integers.
</para>
- <sect2>
+ <sect2 id="datatype-serial">
<title>The Serial Type</title>
<para>
@@ -403,7 +390,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</sect2>
</sect1>
- <sect1 id="monetary-types">
+ <sect1 id="datatype-money">
<title>Monetary Type</title>
<note>
@@ -455,15 +442,15 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</sect1>
- <sect1 id="character-types">
+ <sect1 id="datatype-character">
<title>Character Types</title>
<para>
- <acronym>SQL92</acronym> defines two primary character types:
- <type>char</type> and <type>varchar</type>.
+ <acronym>SQL</acronym> defines two primary character types:
+ <type>character</type> and <type>character varying</type>.
<productname>Postgres</productname> supports these types, in
addition to the more general <type>text</type> type,
- which unlike <type>varchar</type>
+ which unlike <type>character varying</type>
does not require an explicit declared upper
limit on the size of the field.
</para>
@@ -483,16 +470,16 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</thead>
<tbody>
<row>
- <entry>"char"</entry>
- <entry>1 byte</entry>
- <entry><acronym>SQL92</acronym>-compatible</entry>
- <entry>Single character</entry>
+ <entry>character(n), char(n)</entry>
+ <entry>(4+n) bytes</entry>
+ <entry><acronym>SQL</acronym>-compatible</entry>
+ <entry>Fixed-length blank padded</entry>
</row>
<row>
- <entry>char(n)</entry>
+ <entry>character varying(n), varchar(n)</entry>
<entry>(4+n) bytes</entry>
- <entry><acronym>SQL92</acronym>-compatible</entry>
- <entry>Fixed-length blank padded</entry>
+ <entry><acronym>SQL</acronym>-compatible</entry>
+ <entry>Variable-length with limit</entry>
</row>
<row>
<entry>text</entry>
@@ -500,26 +487,32 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
<entry>Most flexible</entry>
<entry>Variable unlimited length</entry>
</row>
- <row>
- <entry>varchar(n)</entry>
- <entry>(4+n) bytes</entry>
- <entry><acronym>SQL92</acronym>-compatible</entry>
- <entry>Variable-length with limit</entry>
- </row>
</tbody>
</tgroup>
</table>
+
+ <note>
+ <para>
+ Although the type <type>text</type> is not SQL-compliant, many
+ other RDBMS packages have it as well.
+ </para>
+ </note>
</para>
<para>
- There is one other fixed-length character type in <productname>Postgres</productname>.
- The <type>name</type> type exists <emphasis>only</emphasis> for
- storage of internal catalog names and
- is not intended for use by the general user.
- Its length is currently defined as 32 bytes (31 characters plus terminator)
- but should be reference using NAMEDATALEN.
- The length is set at compile time (and is therefore adjustable for
- special uses); the default maximum length may change in a future release.
+ There are two other fixed-length character types in
+ <productname>Postgres</productname>. The <type>name</type> type
+ exists <emphasis>only</emphasis> for storage of internal catalog
+ names and is not intended for use by the general user. Its length
+ is currently defined as 32 bytes (31 characters plus terminator)
+ but should be referenced using the macro
+ <symbol>NAMEDATALEN</symbol>. The length is set at compile time
+ (and is therefore adjustable for special uses); the default
+ maximum length may change in a future release. The type
+ <type>"char"</type> (note the quotes) is different from
+ <type>char(1)</type> in that it only uses one byte of storage. It
+ is internally used in the system catalogs as a poor-man's
+ enumeration type.
</para>
<para>
@@ -536,6 +529,11 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</thead>
<tbody>
<row>
+ <entry>"char"</entry>
+ <entry>1 byte</entry>
+ <entry>Single character internal type</entry>
+ </row>
+ <row>
<entry>name</entry>
<entry>32 bytes</entry>
<entry>Thirty-one character internal type</entry>
@@ -547,7 +545,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</sect1>
- <sect1 id="datetime-types">
+ <sect1 id="datatype-datetime">
<title>Date/Time Types</title>
<para>
@@ -641,7 +639,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</para>
- <sect2>
+ <sect2 id="datatype-datetime-input">
<title>Date/Time Input</title>
<para>
@@ -658,7 +656,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</para>
<para>
- See <xref endterm="datetime-appendix-title" linkend="datetime-appendix-title">
+ See <xref linkend="datetime-appendix">
for the exact parsing rules of date/time input and for the recognized time zones.
</para>
@@ -956,7 +954,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl
</para>
<para>
- Refer to <xref endterm="timezone-title" linkend="timezone"> for
+ Refer to <xref linkend="datatype-timezone-table"> for
more examples of time zones.
</para>
</sect3>
@@ -984,8 +982,8 @@ January 8 04:05:06 1999 PST
</para>
<para>
- <table tocentry="1" id="timezone">
- <title id="timezone-title"><productname>Postgres</productname> Time Zone Input</title>
+ <table tocentry="1" id="datatype-timezone-table">
+ <title><productname>Postgres</productname> Time Zone Input</title>
<titleabbrev>Time Zone Inputs</titleabbrev>
<tgroup cols="2">
<thead>
@@ -1112,7 +1110,7 @@ January 8 04:05:06 1999 PST
</sect2>
- <sect2>
+ <sect2 id="datatype-datetime-output">
<title>Date/Time Output</title>
<para>
@@ -1231,7 +1229,7 @@ January 8 04:05:06 1999 PST
</sect2>
- <sect2>
+ <sect2 id="datatype-timezones">
<title>Time Zones</title>
<para>
@@ -1351,7 +1349,7 @@ January 8 04:05:06 1999 PST
</sect2>
- <sect2>
+ <sect2 id="datatype-datetime-internals">
<title>Internals</title>
<para>
@@ -1370,22 +1368,21 @@ January 8 04:05:06 1999 PST
</sect1>
- <sect1 id="boolean-type">
+ <sect1 id="datatype-boolean">
<title>Boolean Type</title>
<para>
- <productname>Postgres</productname> supports <type>bool</type> as
- the <acronym>SQL99</acronym> boolean type.
- <type>bool</type> can have one of only two states: 'true' or 'false'.
- A third state, 'unknown', is not
- implemented and is not suggested in <acronym>SQL99</acronym>;
- <acronym>NULL</acronym> is an
- effective substitute. <type>bool</type> can be used in any boolean expression,
- and boolean expressions
- always evaluate to a result compatible with this type.</para>
+ <productname>Postgres</productname> supports the
+ <acronym>SQL99</acronym> <type>boolean</type> type.
+ <type>boolean</type> can have one of only two states: 'true' or
+ 'false'. A third state, 'unknown', is represented by the SQL NULL
+ state. <type>boolean</type> can be used in any boolean expression,
+ and boolean expressions always evaluate to a result compatible
+ with this type.
+ </para>
<para>
- <type>bool</type> uses 1 byte of storage.
+ <type>boolean</type> uses 1 byte of storage.
</para>
<para>
@@ -1417,7 +1414,7 @@ January 8 04:05:06 1999 PST
</para>
</sect1>
- <sect1 id="geometric-types">
+ <sect1 id="datatype-geometric">
<title>Geometric Types</title>
<para>
@@ -1746,7 +1743,7 @@ January 8 04:05:06 1999 PST
</sect1>
- <sect1 id="net-types">
+ <sect1 id="datatype-net-types">
<title>Network Address Data Types</title>
<para>
@@ -1755,7 +1752,7 @@ January 8 04:05:06 1999 PST
types, because these types offer input error checking and several
specialized operators and functions.
- <table tocentry="1" id="net-types-table">
+ <table tocentry="1" id="datatype-net-types-table">
<title>Network Address Data Types</title>
<tgroup cols="4">
<thead>
@@ -1799,7 +1796,7 @@ January 8 04:05:06 1999 PST
</para>
- <sect2 id="inet-type">
+ <sect2 id="datatype-inet">
<title><type>inet</type></title>
<para>
@@ -1825,7 +1822,7 @@ January 8 04:05:06 1999 PST
</para>
</sect2>
- <sect2 id="cidr-type">
+ <sect2 id="datatype-cidr">
<title><type>cidr</></title>
<para>
@@ -1918,7 +1915,7 @@ January 8 04:05:06 1999 PST
</para>
</sect2>
- <sect2 id="inet-vs-cidr">
+ <sect2 id="datatype-inet-vs-cidr">
<title><type>inet</type> vs <type>cidr</type></title>
<para>
@@ -1936,7 +1933,7 @@ January 8 04:05:06 1999 PST
</para>
</sect2>
- <sect2 id="macaddr-type">
+ <sect2 id="datatype-macaddr">
<title><type>macaddr</></>
<para>
@@ -1955,6 +1952,40 @@ January 8 04:05:06 1999 PST
</sect1>
+ <sect1 id="datatype-bit">
+ <title>Bit String Types</title>
+
+ <para>
+ Bit strings are strings of 1's and 0's. They can be used to store
+ or visualize bit masks. There are two SQL bit types:
+ <type>BIT(<replaceable>x</replaceable>)</type> and <type>BIT
+ VARYING(<replaceable>x</replaceable>)</type>; the
+ <replaceable>x</replaceable> specifies the maximum length.
+ <type>BIT</type> type data is automatically padded with 0's on the
+ right to the maximum length, <type>BIT VARYING</type> is of
+ variable length. <type>BIT</type> without length is requivalent
+ to <literal>BIT(1)</literal>, <type>BIT VARYING</type> means
+ unlimited length. Input data that is longer than the allowed
+ length will be truncated. Refer to <xref
+ linkend="sql-syntax-bit-strings"> for information about the syntax
+ of bit string constants. Bit-logical operators and string
+ manipulation functions are available; see <xref
+ linkend="functions">.
+ </para>
+
+ <informalexample>
+ <para>
+ Some examples:
+<programlisting>
+CREATE TABLE test (a BIT(3), b BIT VARYING(5));
+INSERT INTO test VALUES (B'101', B'00');
+SELECT SUBSTRING(b FROM 1 FOR 2) FROM test;
+</programlisting>
+ </para>
+ </informalexample>
+
+ </sect1>
+
</chapter>
<!-- Keep this comment at the end of the file
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 533c1f2757d..2c6237ab290 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -1,4 +1,4 @@
-<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.46 2000/12/22 18:00:24 tgl Exp $ -->
+<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.47 2001/01/13 18:34:51 petere Exp $ -->
<chapter id="functions">
<title>Functions and Operators</title>
@@ -184,42 +184,102 @@
<entry>@ -5.0</entry>
<entry>5.0</entry>
</row>
+
+ <row>
+ <entry> <literal>&amp;</literal> </entry>
+ <entry>Binary AND</entry>
+ <entry>91 & 15</entry>
+ <entry>11</entry>
+ </row>
+
+ <row>
+ <entry> <literal>|</literal> </entry>
+ <entry>Binary OR</entry>
+ <entry>32 | 3</entry>
+ <entry>35</entry>
+ </row>
+
+ <row>
+ <entry> <literal>#</literal> </entry>
+ <entry>Binary XOR</entry>
+ <entry>17 # 5</entry>
+ <entry>20</entry>
+ </row>
+
+ <row>
+ <entry> <literal>~</literal> </entry>
+ <entry>Binary NOT</entry>
+ <entry>~1</entry>
+ <entry>-2</entry>
+ </row>
+
+ <row>
+ <entry> &lt;&lt; </entry>
+ <entry>Binary shift left</entry>
+ <entry>1 &lt;&lt; 4</entry>
+ <entry>16</entry>
+ </row>
+
+ <row>
+ <entry> &gt;&gt; </entry>
+ <entry>Binary shift right</entry>
+ <entry>8 &gt;&gt; 2</entry>
+ <entry>2</entry>
+ </row>
+
</tbody>
</tgroup>
</table>
-<!--
- <ROW>
- <ENTRY> & </ENTRY>
- <ENTRY>Binary AND</ENTRY>
- <ENTRY>91 & 15</ENTRY>
- </ROW>
- <ROW>
- <ENTRY> | </ENTRY>
- <ENTRY>Binary OR</ENTRY>
- <ENTRY>32 | 3</ENTRY>
- </ROW>
- <ROW>
- <ENTRY> # </ENTRY>
- <ENTRY>Binary XOR</ENTRY>
- <ENTRY>15 # 4</ENTRY>
- </ROW>
- <ROW>
- <ENTRY> ~ </ENTRY>
- <ENTRY>Binary NOT</ENTRY>
- <ENTRY>~1</ENTRY>
- </ROW>
- <ROW>
- <ENTRY> &lt;&lt; </ENTRY>
- <ENTRY>Binary shift left</ENTRY>
- <ENTRY>1 &lt;&lt; 4</ENTRY>
- </ROW>
- <ROW>
- <ENTRY> &gt;&gt; </ENTRY>
- <ENTRY>Binary shift right</ENTRY>
- <ENTRY>8 &gt;&gt; 2</ENTRY>
- </ROW>
--->
+ <para>
+ The <quote>binary</quote> operators are also available for the bit
+ string types <type>BIT</type> and <type>BIT VARYING</type>.
+
+ <table>
+ <title>Bit String Binary Operators</title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Example</entry>
+ <entry>Result</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>B'10001' & B'01101'</entry>
+ <entry>00001</entry>
+ </row>
+ <row>
+ <entry>B'10001' | B'01101'</entry>
+ <entry>11101</entry>
+ </row>
+ <row>
+ <entry>B'10001' # B'01101'</entry>
+ <entry>11110</entry>
+ </row>
+ <row>
+ <entry>~ B'10001'</entry>
+ <entry>01110</entry>
+ </row>
+ <row>
+ <entry>B'10001' << 3</entry>
+ <entry>01000</entry>
+ </row>
+ <row>
+ <entry>B'10001' >> 2</entry>
+ <entry>00100</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ Bit string arguments to <literal>&</literal>, <literal>|</literal>,
+ and <literal>#</literal> must be of equal length. When bit
+ shifting, the original length of the string is preserved, as shown
+ here.
+ </para>
<table tocentry="1">
<title>Mathematical Functions</title>
@@ -484,7 +544,8 @@
wary of potential effects of the automatic padding when using the
<type>CHARACTER</type> type. Generally the functions described
here also work on data of non-string types by converting that data
- to a string representation first.
+ to a string representation first. Some functions also exist
+ natively for bit string types.
</para>
<para>
diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml
index d8cd5f18a28..45b893e1c55 100644
--- a/doc/src/sgml/syntax.sgml
+++ b/doc/src/sgml/syntax.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.33 2001/01/08 22:07:47 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.34 2001/01/13 18:34:51 petere Exp $
-->
<chapter id="sql-syntax">
@@ -232,7 +232,7 @@ SELECT 'foo' 'bar';
</para>
</sect3>
- <sect3>
+ <sect3 id="sql-syntax-bit-strings">
<title>Bit String Constants</title>
<para>