create_type.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:12k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. <refentry id="SQL-CREATETYPE">
  2.  <refmeta>
  3.   <refentrytitle>
  4.    CREATE TYPE
  5.   </refentrytitle>
  6.   <refmiscinfo>SQL - Language Statements</refmiscinfo>
  7.  </refmeta>
  8.  <refnamediv>
  9.   <refname>
  10.    CREATE TYPE
  11.   </refname>
  12.   <refpurpose>
  13.    Defines a new base data type
  14.   </refpurpose>
  15.  </refnamediv>
  16.  <refsynopsisdiv>
  17.   <refsynopsisdivinfo>
  18.    <date>1998-09-21</date>
  19.   </refsynopsisdivinfo>
  20.   <synopsis>
  21. CREATE TYPE <replaceable class="parameter">typename</replaceable> (
  22.         INPUT          = <replaceable class="parameter">input_function</replaceable>
  23.       , OUTPUT         = <replaceable class="parameter">output_function</replaceable>
  24.       , INTERNALLENGTH = (<replaceable class="parameter">internallength</replaceable> | VARIABLE)
  25.     [ , EXTERNALLENGTH = (<replaceable class="parameter">externallength</replaceable> | VARIABLE) ]
  26.     [ , ELEMENT        = <replaceable class="parameter">element</replaceable> ]
  27.     [ , DELIMITER      = <replaceable class="parameter">delimiter</replaceable> ]
  28.     [ , DEFAULT        = "<replaceable class="parameter">default</replaceable>" ]
  29.     [ , SEND           = <replaceable class="parameter">send_function</replaceable> ]
  30.     [ , RECEIVE        = <replaceable class="parameter">receive_function</replaceable> ]
  31.     [ , PASSEDBYVALUE ]
  32. )
  33.   </synopsis>
  34.   
  35.   <refsect2 id="R2-SQL-CREATETYPE-1">
  36.    <refsect2info>
  37.     <date>1998-09-21</date>
  38.    </refsect2info>
  39.    <title>
  40.     Inputs
  41.    </title>
  42.    <para>
  43.     <variablelist>
  44.      <varlistentry>
  45.       <term><replaceable class="parameter">typename</replaceable></term>
  46.       <listitem>
  47.        <para>
  48. The name of a type to be created.
  49.        </para>
  50.       </listitem>
  51.      </varlistentry>
  52.      <varlistentry>
  53.       <term>INTERNALLENGTH <replaceable class="parameter">internallength</replaceable></term>
  54.       <listitem>
  55.        <para>
  56. A literal value, which specifies the internal length of
  57. the new type.
  58.        </para>
  59.       </listitem>
  60.      </varlistentry>
  61.      <varlistentry>
  62.       <term>EXTERNALLENGTH <replaceable class="parameter">externallength</replaceable></term>
  63.       <listitem>
  64.        <para>
  65. A literal value, which specifies the external length of
  66. the new type.
  67.        </para>
  68.       </listitem>
  69.      </varlistentry>
  70.      <varlistentry>
  71.       <term>INPUT <replaceable class="parameter">input_function</replaceable></term>
  72.       <listitem>
  73.        <para>
  74. The name of a function, created by CREATE FUNCTION, which
  75. converts data from its external form to the type's
  76. internal form.
  77.        </para>
  78.       </listitem>
  79.      </varlistentry>
  80.      <varlistentry>
  81.       <term>OUTPUT <replaceable class="parameter">output_function</replaceable></term>
  82.       <listitem>
  83.        <para>
  84. The name of a function, created by CREATE FUNCTION, which
  85. converts data from its internal form to a form suitable
  86. for display.
  87.        </para>
  88.       </listitem>
  89.      </varlistentry>
  90.      <varlistentry>
  91.       <term><replaceable class="parameter">element</replaceable></term>
  92.       <listitem>
  93.        <para>
  94. The type being created is an array; this specifies
  95. the type of the array elements.
  96.        </para>
  97.       </listitem>
  98.      </varlistentry>
  99.      <varlistentry>
  100.       <term><replaceable class="parameter">delimiter</replaceable></term>
  101.       <listitem>
  102.        <para>
  103. The delimiter character for the array.
  104.        </para>
  105.       </listitem>
  106.      </varlistentry>
  107.      <varlistentry>
  108.       <term><replaceable class="parameter">default</replaceable></term>
  109.       <listitem>
  110.        <para>
  111. The default text to be displayed to indicate "data
  112. not present"
  113.        </para>
  114.       </listitem>
  115.      </varlistentry>
  116.      <varlistentry>
  117.       <term><replaceable class="parameter">send_function</replaceable></term>
  118.       <listitem>
  119.        <para>
  120. The name of a function, created by CREATE FUNCTION, which
  121. converts data of this type into a form suitable for
  122. transmission to another machine.
  123. <comment>Is this right?</comment>
  124.        </para>
  125.       </listitem>
  126.      </varlistentry>
  127.      <varlistentry>
  128.       <term><replaceable class="parameter">receive_function</replaceable></term>
  129.       <listitem>
  130.        <para>
  131. The name of a function, created by CREATE FUNCTION, which
  132. converts data of this type from a form suitable for
  133. transmission from another machine to internal form.
  134. <comment>Is this right?</comment>
  135.        </para>
  136.       </listitem>
  137.      </varlistentry>
  138.     </variablelist>
  139.    </para>
  140.   </refsect2>
  141.   <refsect2 id="R2-SQL-CREATETYPE-2">
  142.    <refsect2info>
  143.     <date>1998-09-21</date>
  144.    </refsect2info>
  145.    <title>
  146.     Outputs
  147.    </title>
  148.    <para>
  149.     <variablelist>
  150.      <varlistentry>
  151.       <term><computeroutput>
  152. CREATE
  153.        </computeroutput></term>
  154.       <listitem>
  155.        <para>
  156. Message returned if the type is successfully created.
  157.        </para>
  158.       </listitem>
  159.      </varlistentry>
  160.     </variablelist>
  161.    </para>
  162.   </refsect2>
  163.  </refsynopsisdiv>
  164.  <refsect1 id="R1-SQL-CREATETYPE-1">
  165.   <refsect1info>
  166.    <date>1998-09-21</date>
  167.   </refsect1info>
  168.   <title>
  169.    Description
  170.   </title>
  171.   <para>
  172.    <command>CREATE TYPE</command>  allows  the user to register a new user data
  173.    type with Postgres for use in the current data base.   The
  174.    user  who  defines  a type becomes its owner.
  175.    <replaceable class="parameter">typename</replaceable> is
  176.    the name of the new type and must  be  unique  within  the
  177.    types defined for this database.
  178.   </para>
  179.   <para>
  180.    <command>CREATE TYPE</command>  requires  the  registration of two functions
  181.    (using create function) before defining the type.   The
  182.    representation  of  a  new  base  type  is  determined  by
  183.    <replaceable class="parameter">input_function</replaceable>, which
  184.    converts the type's external  representation  to  an  internal
  185.    representation  usable by the
  186.    operators and functions defined for the type.   Naturally,
  187.    <replaceable class="parameter">output_function</replaceable>
  188.    performs the reverse transformation.  Both
  189.    the input and output functions must be  declared  to  take
  190.    one or two arguments of type "<literal>opaque</literal>".
  191.   </para>
  192.   <para>
  193.    New  base  data  types  can be fixed length, in which case
  194.    <replaceable class="parameter">internallength</replaceable> is a
  195.    positive integer, or variable  length,
  196.    in  which  case Postgres assumes that the new type has the
  197.    same format
  198.    as the Postgres-supplied  data  type, "<literal>text</literal>".
  199.    To  indicate that a type is variable-length, set
  200.    <replaceable class="parameter">internallength</replaceable>
  201.    to <option>VARIABLE</option>.
  202.    The external representation is  similarly specified using the
  203.    <replaceable class="parameter">externallength</replaceable>
  204.    keyword.
  205.   </para>
  206.   <para>
  207.    To indicate that a type is an array and to indicate that a
  208.    type has array elements, indicate the type  of  the  array
  209.    element using the element keyword.  For example, to define
  210.    an array of 4 byte integers ("int4"), specify
  211.    <programlisting>ELEMENT = int4</programlisting>
  212.   </para>
  213.   <para>
  214.    To indicate the delimiter to be used  on  arrays  of  this
  215.    type,  <replaceable class="parameter">delimiter</replaceable>
  216.    can be
  217.    set to a specific character.  The default delimiter is the comma
  218.    ("<literal>,</literal>").
  219.   </para>
  220.   <para>
  221.    A default value is optionally available  in  case  a  user
  222.    wants  some  specific  bit  pattern to mean "data not present."
  223.    Specify the default with the <literal>DEFAULT</literal> keyword.
  224.    <comment>How does the user specify that bit pattern and associate
  225.     it with the fact that the data is not present></comment>
  226.   </para>
  227.   <para>
  228.    The optional functions
  229.    <replaceable class="parameter">send_function</replaceable> and
  230.    <replaceable class="parameter">receive_function</replaceable>
  231.    are  used when the application program requesting Postgres
  232.    services resides on a different machine.   In  this  case,
  233.    the  machine  on  which  Postgres runs may use a format for the data
  234.    type different from that used on the remote  machine.
  235.    In  this case it is appropriate to convert data items to a
  236.    standard form when sending from the server to  the  client
  237.    and  converting  from  the  standard format to the machine
  238.    specific format when the server receives the data from the
  239.    client.   If these functions are not specified, then it is
  240.    assumed that the internal format of the type is acceptable
  241.    on  all relevant machine architectures.  For example, single
  242.    characters do not have to be converted if passed  from
  243.    a Sun-4 to a DECstation, but many other types do.
  244.   </para>
  245.   <para>
  246.    The  optional flag,  <option>PASSEDBYVALUE</option>, indicates that operators
  247.    and functions which use this data type should be passed an
  248.    argument  by  value  rather  than by reference.  Note that you
  249.    may not pass by value types whose internal representation is 
  250.    more than four bytes.
  251.   </para>
  252.   <para>
  253.    For new base types, a user can define operators, functions
  254.    and aggregates using the appropriate facilities  described
  255.    in this section.
  256.   </para>
  257.   <refsect2>
  258.    <title>Array Types</title>
  259.    <para>
  260.     Two   generalized   built-in   functions,   array_in   and
  261.     array_out, exist for  quick  creation  of  variable-length
  262.     array  types.   These  functions  operate on arrays of any
  263.     existing Postgres type.
  264.    </para>
  265.   </refsect2>
  266.   <refsect2>
  267.    <title>Large Object Types</title>
  268.    <para>
  269.     A "regular" Postgres  type  can  only  be  8192  bytes  in
  270.     length.  If you need a larger type you must create a Large
  271.     Object type.  The interface for these types  is  discussed
  272.     at  length  in
  273.     <citetitle>The PostgreSQL Programmer's Guide</citetitle>.
  274.     The length of all large object types is always VARIABLE.
  275.    </para>
  276.   </refsect2>
  277.  </refsect1>
  278.  <refsect1>
  279.   <title>Examples</title>
  280.   <para>
  281.    This command creates the box data type and then uses the
  282.    type in a class definition:
  283.   </para>
  284.   <programlisting>
  285. CREATE TYPE box (INTERNALLENGTH = 8,
  286.     INPUT = my_procedure_1, OUTPUT = my_procedure_2);
  287. CREATE TABLE myboxes (id INT4, description box);
  288.   </programlisting>
  289.   <para>
  290.    This command creates a variable length array type with
  291.    integer elements.
  292.    <programlisting>
  293. CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out,
  294.     INTERNALLENGTH = VARIABLE, ELEMENT = int4);
  295. CREATE TABLE myarrays (id int4, numbers int4array);
  296.    </programlisting>
  297.   </para>
  298.   <para>
  299.    This command creates a large object type and uses it in
  300.    a class definition:
  301.    <programlisting>
  302. CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout,
  303.     INTERNALLENGTH = VARIABLE);
  304. CREATE TABLE big_objs (id int4, obj bigobj);
  305.    </programlisting>
  306.   </para>
  307.   <refsect2>
  308.    <title>Restrictions</title>
  309.    <para>
  310.     Type  names  cannot  begin  with  the underscore character
  311.     ("_") and can only be 31 characters long.  This is because
  312.     Postgres silently creates an array type for each base type
  313.     with a name consisting of the base type's  name  prepended
  314.     with an underscore.
  315.    </para>
  316.   </refsect2>
  317.   <refsect2 id="R2-SQL-CREATETYPE-3">
  318.    <refsect2info>
  319.     <date>1998-09-21</date>
  320.    </refsect2info>
  321.    <title>
  322.     Notes
  323.    </title>
  324.    <para>
  325.     Refer to <command>DROP TYPE</command> to remove an existing type.
  326.    </para>
  327.    <para>
  328.     See also <command>CREATE  FUNCTION</command>,
  329.     <command>CREATE  OPERATOR</command> and the chapter on Large Objects
  330.     in the <citetitle>PostgreSQL Programmer's Guide</citetitle>.
  331.    </para>
  332.   </refsect2>
  333.  </refsect1>
  334.  
  335.  
  336.  <refsect1 id="R1-SQL-CREATETYPE-3">
  337.   <title>
  338.    Compatibility
  339.   </title>
  340.   <refsect2 id="R2-SQL-CREATETYPE-4">
  341.    <refsect2info>
  342.     <date>1998-09-21</date>
  343.    </refsect2info>
  344.    <title>
  345.     SQL3
  346.    </title>
  347.    <para>
  348.    <command>CREATE TYPE</command> is an <acronym>SQL3</acronym> statement.
  349.    </para>
  350.   </refsect2>
  351.  </refsect1>
  352. </refentry>
  353. <!-- Keep this comment at the end of the file
  354. Local variables:
  355. mode: sgml
  356. sgml-omittag:nil
  357. sgml-shorttag:t
  358. sgml-minimize-attributes:nil
  359. sgml-always-quote-attributes:t
  360. sgml-indent-step:1
  361. sgml-indent-data:t
  362. sgml-parent-document:nil
  363. sgml-default-dtd-file:"../reference.ced"
  364. sgml-exposed-tags:nil
  365. sgml-local-catalogs:"/usr/lib/sgml/catalog"
  366. sgml-local-ecat-files:nil
  367. End:
  368. -->