OSDN Git Service

Add new files from Oliver Elphick.
authorThomas G. Lockhart <lockhart@fourpalms.org>
Wed, 29 Jul 1998 06:23:26 +0000 (06:23 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Wed, 29 Jul 1998 06:23:26 +0000 (06:23 +0000)
doc/src/sgml/ref/commands.sgml
doc/src/sgml/ref/create_trigger.sgml [new file with mode: 0644]
doc/src/sgml/ref/create_type.sgml [new file with mode: 0644]

index 3edc715..5e761b1 100644 (file)
-<Chapter>
-<Title>Commands</Title>
+<!-- allfiles.sgml
+-
+- Complete list of usable sgml source files in this directory.
+-
+- -->
 
-<Para>
-</Para>
+<!entity intro-ref          system "intro-ref.sgml">
+<!entity commands           system "commands.sgml">
 
-&alterTable;
-&alterUser;
-&begin;
-&close;
-&cluster;
-&commit;
-&copy;
-&createAggregate;
-&createDatabase;
-&createFunction;
-&createIndex;
-&createLanguage;
-&createOperator;
-&createRule;
-&createSequence;
-&createTable;
-&dropFunction;
-&select;
+<!-- these will go into the "operators" reference chapter -->
+<!entity all                system "all.sgml">
+<!entity any                system "any.sgml">
+<!entity between            system "between.sgml">
+<!entity in                 system "in.sgml">
+<!entity like               system "like.sgml">
 
-</Chapter>
+<!-- these will go into the "functions" reference chapter -->
+<!entity avg                system "avg.sgml">
+<!entity cast               system "cast.sgml">
+<!entity charLength         system "char_length.sgml">
+<!entity count              system "count.sgml">
+<!entity currentDate        system "current_date.sgml">
+<!entity currentTime        system "current_time.sgml">
+<!entity currentTimestamp   system "current_timestamp.sgml">
+<!entity currentUser        system "current_user.sgml">
+<!entity exists             system "exists.sgml">
+<!entity extract            system "extract.sgml">
+<!entity initcap            system "initcap.sgml">
+<!entity lower              system "lower.sgml">
+<!entity lpad               system "lpad.sgml">
+<!entity max                system "max.sgml">
+<!entity min                system "min.sgml">
+<!entity position           system "position.sgml">
+<!entity rpad               system "rpad.sgml">
+<!entity substring          system "substring.sgml">
+<!entity sum                system "sum.sgml">
+<!entity translate          system "translate.sgml">
+<!entity trim               system "trim.sgml">
+<!entity upper              system "upper.sgml">
 
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"../reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:"/usr/lib/sgml/catalog"
-sgml-local-ecat-files:nil
-End:
+<!-- these are folded into create_table.sgml
+<!entity check              system "check.sgml">
+<!entity constraints        system "constraint.sgml">
+<!entity default            system "default.sgml">
+<!entity notNull            system "not_null.sgml">
+<!entity primaryKey         system "primary_key.sgml">
+<!entity unique             system "unique.sgml">
 -->
+
+<!-- these are folded into select.sgml
+<!entity groupBy            system "group_by.sgml">
+<!entity having             system "having.sgml">
+<!entity orderBy            system "order_by.sgml">
+<!entity union              system "union.sgml">
+-->
+
+<!-- these are in the "commands" reference chapter -->
+<!entity alterTable         system "alter_table.sgml">
+<!entity alterUser          system "alter_user.sgml">
+<!entity begin              system "begin.sgml">
+<!entity close              system "close.sgml">
+<!entity cluster            system "cluster.sgml">
+<!entity commit             system "commit.sgml">
+<!entity copy               system "copy.sgml">
+<!entity createAggregate    system "create_aggregate.sgml">
+<!entity createDatabase     system "create_database.sgml">
+<!entity createFunction     system "create_function.sgml">
+<!entity createIndex        system "create_index.sgml">
+<!entity createLanguage     system "create_language.sgml">
+<!entity createOperator     system "create_operator.sgml">
+<!entity createRule         system "create_rule.sgml">
+<!entity createSequence     system "create_sequence.sgml">
+<!entity createTable        system "create_table.sgml">
+<!entity createTrigger      system "create_trigger.sgml">
+<!entity createType         system "create_type.sgml">
+<!entity createUser         system "create_user.sgml">
+<!entity createView         system "create_view.sgml">
+<!entity declare            system "declare.sgml">
+<!entity delete             system "delete.sgml">
+<!entity dropAggregate      system "drop_aggregate.sgml">
+<!entity dropDatabase       system "drop_database.sgml">
+<!entity dropFunction       system "drop_function.sgml">
+<!entity dropIndex          system "drop_index.sgml">
+<!entity dropLanguage       system "drop_language.sgml">
+<!entity dropOperator       system "drop_operator.sgml">
+<!entity dropRule           system "drop_rule.sgml">
+<!entity dropSequence       system "drop_sequence.sgml">
+<!entity dropTable          system "drop_table.sgml">
+<!entity dropTrigger        system "drop_trigger.sgml">
+<!entity dropType           system "drop_type.sgml">
+<!entity dropUser           system "drop_user.sgml">
+<!entity dropView           system "drop_view.sgml">
+<!entity explain            system "explain.sgml">
+<!entity fetch              system "fetch.sgml">
+<!entity grant              system "grant.sgml">
+<!entity insert             system "insert.sgml">
+<!entity listen             system "listen.sgml">
+<!entity load               system "load.sgml">
+<!entity lock               system "lock.sgml">
+<!entity move               system "move.sgml">
+<!entity notify             system "notify.sgml">
+<!entity reset              system "reset.sgml">
+<!entity revoke             system "revoke.sgml">
+<!entity rollback           system "rollback.sgml">
+<!entity select             system "select.sgml">
+<!entity set                system "set.sgml">
+<!entity show               system "show.sgml">
+<!entity update             system "update.sgml">
+<!entity vacuum             system "vacuum.sgml">
diff --git a/doc/src/sgml/ref/create_trigger.sgml b/doc/src/sgml/ref/create_trigger.sgml
new file mode 100644 (file)
index 0000000..a183a80
--- /dev/null
@@ -0,0 +1,247 @@
+<REFENTRY ID="SQL-CREATETRIGGER-1">
+ <REFMETA>
+  <REFENTRYTITLE>
+   CREATE TRIGGER
+  </REFENTRYTITLE>
+  <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+ </REFMETA>
+ <REFNAMEDIV>
+  <REFNAME>
+   CREATE TRIGGER
+  </REFNAME>
+  <REFPURPOSE>
+   CREATE TRIGGER - creates a new trigger.
+  </REFPURPOSE>
+ <REFSYNOPSISDIV>
+  <REFSYNOPSISDIVINFO>
+   <DATE>1998-04-15</DATE>
+  </REFSYNOPSISDIVINFO>
+  <SYNOPSIS>
+   CREATE TRIGGER <REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE> { BEFORE | AFTER }
+       { <REPLACEABLE CLASS="PARAMETER">event</REPLACEABLE> [OR ...] }
+       ON <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE> FOR EACH { ROW | STATEMENT }
+       EXECUTE PROCEDURE <REPLACEABLE CLASS="PARAMETER">funcname</REPLACEABLE> ( <REPLACEABLE CLASS="PARAMETER">arguments</REPLACEABLE> )
+  </SYNOPSIS>
+  
+  <REFSECT2 ID="R2-SQL-CREATETRIGGER-1">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    Inputs
+   </TITLE>
+   <PARA>
+   </PARA>
+   <VARIABLELIST>
+    <VARLISTENTRY>
+     <TERM>
+     </TERM>
+     <LISTITEM>
+      <PARA>
+       <VARIABLELIST>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue><replaceable class="parameter">name</replaceable></ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of an existing trigger.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue><replaceable class="parameter">table</replaceable></ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of a table.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue><replaceable class="parameter">event</replaceable></ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          One of INSERT, DELETE or UPDATE.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue><replaceable class="parameter">funcname</replaceable></ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          A user-supplied function.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       </variablelist>
+     </LISTITEM>
+    </VARLISTENTRY>
+   </VARIABLELIST>
+  </REFSECT2>
+  
+  <REFSECT2 ID="R2-SQL-CREATETRIGGER-2">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    Outputs
+   </TITLE>
+   <PARA>
+   </PARA>
+   <VARIABLELIST>
+    <VARLISTENTRY>
+     <TERM>
+     </TERM>
+     <LISTITEM>
+      <PARA>
+       <VARIABLELIST>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>CREATE</ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          This message is returned if the trigger is successfully created.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       </variablelist>
+     </LISTITEM>
+    </VARLISTENTRY>
+   </VARIABLELIST>
+  </REFSECT2>
+ </REFSYNOPSISDIV>
+ <REFSECT1 ID="R1-SQL-CREATETRIGGER-1">
+  <REFSECT1INFO>
+   <DATE>1998-04-15</DATE>
+  </REFSECT1INFO>
+  <TITLE>
+   Description
+  </TITLE>
+  <PARA>
+   CREATE TRIGGER will enter a new trigger into the current
+   data base.  The trigger will be associated with the relation
+   <replaceable class="parameter">relname</replaceable> and will execute
+   the specified function <replaceable class="parameter">funcname</replaceable>.
+  </PARA>
+  <PARA>
+   Only the relation owner may create a trigger on this relation.
+  </PARA>
+  <PARA>
+   At release 6.3.2, STATEMENT triggers are not implemented.
+  </PARA>
+  <PARA>
+   The trigger can be specified to  fire  either  before  the
+   operation is attempted on a tuple (before constraints
+   are checked and the INSERT, UPDATE or DELETE is attempted)  or
+   after  the  operation  has been attempted (e.g. after constraints
+   are checked and the INSERT, UPDATE or DELETE has completed).  If the
+   trigger fires before the event, the trigger may
+   skip the operation for the current tuple, or change the tuple
+   being  inserted  (for  INSERT and UPDATE operations only).  If
+   the trigger fires after the event,  all  changes,  including  the
+   last INSERTion, UPDATE or DELETion, are "visible" to the trigger.
+  </PARA>
+  <PARA>
+   Refer to the SPI and trigger programming guides  for  more
+   information.
+  </PARA>
+  <REFSECT2 ID="R2-SQL-CREATETRIGGER-3">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    Notes
+   </TITLE>
+   <PARA>
+    CREATE TRIGGER statement is a PostgreSQL language extension.
+   </PARA>
+   <PARA>
+    Refer to the DROP TRIGGER statement for information on how to 
+    remove triggers.
+   </PARA>
+   
+  </REFSECT2>
+  
+ <REFSECT1 ID="R1-SQL-CREATETRIGGER-2">
+  <TITLE>
+   Usage
+  </TITLE>
+  <PARA>
+  Check if the specified distributor code exists in the distributors
+  table before appending or updating a row in the table films:
+  </PARA>
+  <ProgramListing>
+   CREATE TRIGGER if_dist_exists
+       BEFORE INSERT OR UPDATE ON films FOR EACH ROW
+       EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
+  </ProgramListing>
+  <PARA>
+    Before cancelling a distributor or updating its code, remove every
+    reference to the table films:
+  </PARA>
+  <ProgramListing>
+   CREATE TRIGGER if_film_exists 
+       BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
+       EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
+  </ProgramListing>
+ </REFSECT1>
+ <REFSECT1 ID="R1-SQL-CREATETRIGGER-3">
+  <TITLE>
+   Compatibility
+  </TITLE>
+  <PARA>
+  </PARA>
+  
+  <REFSECT2 ID="R2-SQL-CREATETRIGGER-4">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    SQL92
+   </TITLE>
+   <PARA>
+   There is no CREATE TRIGGER statement in SQL92.
+   </PARA>
+   <PARA>
+    The second example above may also be done by using a FOREIGN KEY
+    constraint as in:
+   </PARA>
+  <ProgramListing>
+    CREATE TABLE distributors (
+        did      DECIMAL(3),
+        name     VARCHAR(40),
+        CONSTRAINT if_film_exists FOREIGN KEY(did) REFERENCES films
+                 ON UPDATE CASCADE ON DELETE CASCADE  
+        );
+  </ProgramListing>
+   <PARA>
+    However, foreign keys are not yet implemented at version 6.3.2 of
+    PostgreSQL.
+   </PARA>
+</REFENTRY>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:"../reference.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:"/usr/lib/sgml/catalog"
+sgml-local-ecat-files:nil
+End:
+-->
\ No newline at end of file
diff --git a/doc/src/sgml/ref/create_type.sgml b/doc/src/sgml/ref/create_type.sgml
new file mode 100644 (file)
index 0000000..2f1cc46
--- /dev/null
@@ -0,0 +1,438 @@
+<REFENTRY ID="SQL-CREATETYPE-1">
+ <REFMETA>
+  <REFENTRYTITLE>
+   CREATE TYPE
+  </REFENTRYTITLE>
+  <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+ </REFMETA>
+ <REFNAMEDIV>
+  <REFNAME>
+   CREATE TYPE
+  </REFNAME>
+  <REFPURPOSE>
+   CREATE TYPE - defines a new base data type.
+  </REFPURPOSE>
+ <REFSYNOPSISDIV>
+  <REFSYNOPSISDIVINFO>
+   <DATE>1998-04-15</DATE>
+  </REFSYNOPSISDIVINFO>
+  <SYNOPSIS>
+   CREATE TYPE <replaceable class="parameter">typename</replaceable> (
+        INTERNALLENGTH = (<replaceable class="parameter">internallength</replaceable> | VARIABLE)
+     [, EXTERNALLENGTH = (<replaceable class="parameter">externallength</replaceable> | VARIABLE) ]
+<comment>
+Why are parentheses required around the length parameters?
+</comment>
+      , INPUT     = <replaceable class="parameter">input_function</replaceable>
+      , OUTPUT    = <replaceable class="parameter">output_function</replaceable>
+     [, ELEMENT   = <replaceable class="parameter">element</replaceable>]
+     [, DELIMITER = <replaceable class="parameter">delimiter</replaceable>]
+     [, DEFAULT   = "<replaceable class="parameter">default</replaceable>" ]
+     [, SEND      = <replaceable class="parameter">send_function</replaceable> ]
+     [, RECEIVE   = <replaceable class="parameter">receive_function</replaceable> ]
+     [, PASSEDBYVALUE])
+  </SYNOPSIS>
+  
+  <REFSECT2 ID="R2-SQL-CREATETYPE-1">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    Inputs
+   </TITLE>
+   <PARA>
+   </PARA>
+   <VARIABLELIST>
+    <VARLISTENTRY>
+     <TERM>
+     </TERM>
+     <LISTITEM>
+      <PARA>
+       <VARIABLELIST>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">typename</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of a type to be created.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">internallength</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          A literal value, which specifies the internal length of
+          the new type.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">externallength</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          A literal value, which specifies the external length of
+          the new type.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">input_function</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of a function, created by CREATE FUNCTION, which
+          converts data from its external form to the type's
+          internal form.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">output_function</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of a function, created by CREATE FUNCTION, which
+          converts data from its internal form to a form suitable
+          for display.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">element</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The type being created is an array; this specifies
+          the type of the array elements.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">delimiter</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The delimiter character for the array.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">default</replaceable
+           ></ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The default text to be displayed to indicate "data
+          not present"
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">send_function</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of a function, created by CREATE FUNCTION, which
+          converts data of this type into a form suitable for
+          transmission to another machine.
+<comment>Is this right?</comment>
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>
+          <replaceable class="parameter">receive_function</replaceable>
+         </ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          The name of a function, created by CREATE FUNCTION, which
+          converts data of this type from a form suitable for
+          transmission from another machine to internal form.
+<comment>Is this right?</comment>
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       </variablelist>
+     </LISTITEM>
+    </VARLISTENTRY>
+   </VARIABLELIST>
+  </REFSECT2>
+  
+  <REFSECT2 ID="R2-SQL-CREATETYPE-2">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    Outputs
+   </TITLE>
+   <PARA>
+   </PARA>
+   <VARIABLELIST>
+    <VARLISTENTRY>
+     <TERM>
+     </TERM>
+     <LISTITEM>
+      <PARA>
+       <VARIABLELIST>
+       <VARLISTENTRY>
+        <TERM>
+         <ReturnValue>CREATE</ReturnValue>
+        </TERM>
+        <LISTITEM>
+         <PARA>
+          Message returned if the type is successfully created.
+         </PARA>
+        </LISTITEM>
+       </VARLISTENTRY>
+       </variablelist>
+     </LISTITEM>
+    </VARLISTENTRY>
+   </VARIABLELIST>
+   
+  </REFSECT2>
+ </REFSYNOPSISDIV>
+ <REFSECT1 ID="R1-SQL-CREATETYPE-1">
+  <REFSECT1INFO>
+   <DATE>1998-04-15</DATE>
+  </REFSECT1INFO>
+  <TITLE>
+   Description
+  </TITLE>
+  <PARA>
+   CREATE  TYPE  allows  the user to register a new user data
+   type with Postgres for use in the current data base.   The
+   user  who  defines  a type becomes its owner.
+   <replaceable class="parameter">Typename</replaceable> is
+   the name of the new type and must  be  unique  within  the
+   types defined for this database.
+  </para>
+  <PARA>
+   CREATE  TYPE  requires  the  registration of two functions
+   (using create function) before defining the type.   The
+   representation  of  a  new  base  type  is  determined  by
+   <replaceable class="parameter">input_function</replaceable>, which
+   converts the type's external  representation  to  an  internal
+   representation  usable by the
+   operators and functions defined for the type.   Naturally,
+   <replaceable class="parameter">output_function</replaceable>
+   performs the reverse transformation.  Both
+   the input and output functions must be  declared  to  take
+   one or two arguments of type "<literal>opaque</literal>".
+  </para>
+  <PARA>
+   New  base  data  types  can be fixed length, in which case
+   <replaceable class="parameter">internallength</replaceable> is a
+   positive integer, or variable  length,
+   in  which  case Postgres assumes that the new type has the
+   same format
+   as the Postgres-supplied  data  type, "<literal>text</literal>".
+   To  indicate that a type is variable-length, set
+   <replaceable class="parameter">internallength</replaceable>
+   to VARIABLE.
+   The external representation is  similarly specified using the
+   <replaceable class="parameter">externallength</replaceable>
+   keyword.
+  </para>
+  <PARA>
+   To indicate that a type is an array and to indicate that a
+   type has array elements, indicate the type  of  the  array
+   element using the element keyword.  For example, to define
+   an array of 4 byte integers ("int4"), specify
+   <programlisting>ELEMENT = int4</programlisting>
+  </para>
+  <PARA>
+   To indicate the delimiter to be used  on  arrays  of  this
+   type,  <replaceable class="parameter">delimiter</replaceable>
+   can be
+   set to a specific character.  The default delimiter is the comma
+   ("<literal>,</literal>").
+  </para>
+  <PARA>
+   A default value is optionally available  in  case  a  user
+   wants  some  specific  bit  pattern to mean "data not present."
+   Specify the default with the DEFAULT keyword.
+<comment>How does the user specify that bit pattern and associate
+it with the fact that the data is not present></comment>
+  </para>
+  <PARA>
+   The optional functions
+   <replaceable class="parameter">send_function</replaceable> and
+   <replaceable class="parameter">receive_function</replaceable>
+   are  used when the application program requesting Postgres
+   services resides on a different machine.   In  this  case,
+   the  machine  on  which  Postgres runs may use a format for the data
+   type different from that used on the remote  machine.
+   In  this case it is appropriate to convert data items to a
+   standard form when sending from the server to  the  client
+   and  converting  from  the  standard format to the machine
+   specific format when the server receives the data from the
+   client.   If these functions are not specified, then it is
+   assumed that the internal format of the type is acceptable
+   on  all relevant machine architectures.  For example, single
+   characters do not have to be converted if passed  from
+   a Sun-4 to a DECstation, but many other types do.
+  </para>
+  <PARA>
+   The  optional flag,  PASSEDBYVALUE, indicates that operators
+   and functions which use this data type should be passed an
+   argument  by  value  rather  than by reference.  Note that you
+   may not pass by value types whose internal representation is 
+   more than four bytes.
+  </para>
+  <PARA>
+   For new base types, a user can define operators, functions
+   and aggregates using the appropriate facilities  described
+   in this section.
+  </para>
+  <refsect2>
+   <title>Array Types</title>
+   <para>
+       Two   generalized   built-in   functions,   array_in   and
+       array_out, exist for  quick  creation  of  variable-length
+       array  types.   These  functions  operate on arrays of any
+    existing Postgres type.</para>
+  </refsect2>
+
+  <refsect2>
+   <title>Large Object Types</title>
+   <para>
+    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
+<comment>This section reference needs replacing</comment>
+    Section 7, the large object interface.  The
+    length of all large object types is always VARIABLE.
+  </refsect2>
+ </refsect1>
+ <refsect1>
+  <title>Examples</title>
+  <para>
+   This command creates the box data type and then uses the
+   type in a class definition:
+  </para>
+  <programlisting>
+       CREATE TYPE box (INTERNALLENGTH = 8,
+            INPUT = my_procedure_1, OUTPUT = my_procedure_2)
+
+       CREATE TABLE myboxes (id INT4, description box)
+  </programlisting>
+  <para>
+   This command creates a variable length array type with
+   integer elements.
+  </para>
+  <programlisting>
+       CREATE TYPE int4array
+          (INPUT = array_in, OUTPUT = array_out,
+           INTERNALLENGTH = VARIABLE, ELEMENT = int4)
+
+       CREATE TABLE myarrays (id int4, numbers int4array)
+  </programlisting>
+  <para>
+   This command creates a large object type and uses it in
+   a class definition.
+  </para>
+  <programlisting>
+       CREATE TYPE bigobj
+          (INPUT = lo_filein, OUTPUT = lo_fileout,
+           INTERNALLENGTH = VARIABLE)
+
+       CREATE TABLE big_objs (id int4, obj bigobj)
+  </programlisting>
+  <refsect2>
+   <title>Restrictions</title>
+   <para>
+    Type  names  cannot  begin  with  the underscore character
+    ("_") and can only be 15 characters long.  This is because
+    Postgres silently creates an array type for each base type
+    with a name consisting of the base type's  name  prepended
+    with an underscore.
+   </para>
+  </refsect2>
+  <REFSECT2 ID="R2-SQL-CREATETYPE-3">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    Notes
+   </TITLE>
+   <PARA>
+    Refer to DROP TYPE statement to drop types.
+   </PARA>
+   <PARA>
+    See also CREATE  FUNCTION,  CREATE  OPERATOR and large_objects.</para>
+  </REFSECT2>
+ </refsect1>
+ <REFSECT1 ID="R1-SQL-CREATETYPE-3">
+  <TITLE>
+   Compatibility
+  </TITLE>
+  <PARA>
+   CREATE TYPE statement is a PostgreSQL language extension.
+  </PARA>
+
+  <REFSECT2 ID="R2-SQL-CREATETYPE-4">
+   <REFSECT2INFO>
+    <DATE>1998-04-15</DATE>
+   </REFSECT2INFO>
+   <TITLE>
+    SQL3
+   </TITLE>
+   <PARA>
+   CREATE TYPE is a SQL3 statement.
+   </PARA>
+  
+ </REFSECT2>
+</REFENTRY>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:"../reference.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:"/usr/lib/sgml/catalog"
+sgml-local-ecat-files:nil
+End:
+-->
\ No newline at end of file