<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_type.sgml,v 1.22 2001/09/13 15:55:24 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_type.sgml,v 1.23 2001/09/13 19:05:29 petere Exp $
Postgres documentation
-->
<para>
<command>CREATE TYPE</command> allows the user to register a new user data
- type with Postgres for use in the current data base. The
+ type with PostgreSQL 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
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
+ in which case PostgreSQL assumes that the new type has the
same format
- as the Postgres-supplied data type, <type>text</type>.
+ as the PostgreSQL-supplied data type, <type>text</type>.
To indicate that a type is variable length, set
<replaceable class="parameter">internallength</replaceable>
to <option>VARIABLE</option>.
The optional arguments
<replaceable class="parameter">send_function</replaceable> and
<replaceable class="parameter">receive_function</replaceable>
- are used when the application program requesting Postgres
+ are used when the application program requesting PostgreSQL
services resides on a different machine. In this case,
- the machine on which Postgres runs may use a format for the data
+ the machine on which PostgreSQL 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
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.
+ existing PostgreSQL type.
</para>
</refsect2>
-
</refsect1>
+ <refsect1 id="SQL-CREATETYPE-notes">
+ <title>Notes</title>
+
+ <para>
+ Type names cannot begin with the underscore character
+ (<quote><literal>_</literal></quote>) and can only be 31
+ characters long. This is because PostgreSQL silently creates an
+ array type for each base type with a name consisting of the base
+ type's name prepended with an underscore.
+ </para>
+ </refsect1>
+
<refsect1>
<title>Examples</title>
<para>
- This command creates the box data type and then uses the
+ This command creates the <type>box</type> data type and then uses the
type in a table definition:
- <programlisting>
+<programlisting>
CREATE TYPE box (INTERNALLENGTH = 8,
INPUT = my_procedure_1, OUTPUT = my_procedure_2);
CREATE TABLE myboxes (id INT4, description box);
- </programlisting>
+</programlisting>
</para>
<para>
This command creates a variable length array type with
- integer elements:
+ <type>integer</type> elements:
- <programlisting>
+<programlisting>
CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out,
INTERNALLENGTH = VARIABLE, ELEMENT = int4);
CREATE TABLE myarrays (id int4, numbers int4array);
- </programlisting>
+</programlisting>
</para>
<para>
This command creates a large object type and uses it in
a table definition:
- <programlisting>
+<programlisting>
CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout,
INTERNALLENGTH = VARIABLE);
CREATE TABLE big_objs (id int4, obj bigobj);
- </programlisting>
+</programlisting>
</para>
+ </refsect1>
- <refsect2 id="R2-SQL-CREATETYPE-3">
- <refsect2info>
- <date>1998-09-21</date>
- </refsect2info>
- <title>
- Notes
- </title>
-
- <para>
- Type names cannot begin with the underscore character
- ("_") and can only be 31 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>
+ <refsect1 id="SQL-CREATETYPE-compatibility">
+ <title>Compatibility</title>
- <para>
- Refer to <command>DROP TYPE</command> to remove an existing type.
- </para>
- <para>
- See also <command>CREATE FUNCTION</command>,
- <command>CREATE OPERATOR</command> and the chapter on Large Objects
- in the <citetitle>PostgreSQL Programmer's Guide</citetitle>.
- </para>
- </refsect2>
+ <para>
+ This <command>CREATE TYPE</command> command is a
+ <productname>PostgreSQL</productname> extension. There is a
+ <command>CREATE TYPE</command> statement in SQL99 that is rather
+ different in detail.
+ </para>
</refsect1>
-
-
- <refsect1 id="R1-SQL-CREATETYPE-3">
- <title>
- Compatibility
- </title>
- <refsect2 id="R2-SQL-CREATETYPE-4">
- <refsect2info>
- <date>1998-09-21</date>
- </refsect2info>
- <title>
- SQL3
- </title>
- <para>
- <command>CREATE TYPE</command> is an <acronym>SQL3</acronym> statement.
- </para>
- </refsect2>
+ <refsect1 id="SQL-CREATETYPE-see-also">
+ <title>See Also</title>
+
+ <simplelist type="inline">
+ <member><xref linkend="sql-createfunction"></member>
+ <member><xref linkend="sql-droptype"></member>
+ <member><citetitle>PostgreSQL Programmer's Guide</citetitle></member>
+ </simplelist>
</refsect1>
+
</refentry>
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_type.sgml,v 1.10 2001/09/03 12:57:50 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/drop_type.sgml,v 1.11 2001/09/13 19:05:29 petere Exp $
Postgres documentation
-->
<para>
Only the owner of a type can remove it.
</para>
+ </refsect1>
- <refsect2 id="R2-SQL-DROPTYPE-3">
- <refsect2info>
- <date>1998-09-22</date>
- </refsect2info>
- <title>
- Notes
- </title>
- <para>
- DROP TYPE statement is a <productname>Postgres</productname>
- language extension.
- </para>
- <para>
- Refer to <command>CREATE TYPE</command> for
- information on how to create types.
- </para>
- <para>
- It is the user's responsibility to remove any operators,
- functions, aggregates, access methods, subtypes, and tables
- that use a deleted type.
- </para>
+ <refsect1 id="SQL-DROPTYPE-notes">
+ <title>Notes</title>
- <para>
- If a built-in type is removed, the behavior of the backend
- is unpredictable.
- </para>
- </refsect2>
+ <itemizedlist>
+ <listitem>
+ <para>
+ It is the user's responsibility to remove any operators,
+ functions, aggregates, access methods, subtypes, and tables that
+ use a deleted type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ If a built-in type is removed, the behavior of the server is
+ unpredictable.
+ </para>
+ </listitem>
+ </itemizedlist>
</refsect1>
- <refsect1 id="R1-SQL-DROPTYPE-2">
- <title>
- Usage
- </title>
+ <refsect1 id="SQL-DROPTYPE-examples">
+ <title>Examples</title>
<para>
- To remove the <literal>box</literal> type:
+ To remove the <type>box</type> type:
- <programlisting>
+<programlisting>
DROP TYPE box;
- </programlisting>
+</programlisting>
</para>
</refsect1>
- <refsect1 id="R1-SQL-DROPTYPE-3">
- <title>
- Compatibility
- </title>
-
- <refsect2 id="R2-SQL-DROPTYPE-5">
- <refsect2info>
- <date>1998-09-22</date>
- </refsect2info>
- <title>
- SQL3
- </title>
- <para>
- <command>DROP TYPE</command> is a <acronym>SQL3</acronym> statement.
- </para>
- </refsect2>
+ <refsect1 id="SQL-DROPTYPE-compatibility">
+ <title>Compatibility</title>
+
+ <para>
+ A <command>DROP TYPE</command> statement exists in SQL99. As with
+ most other <quote>drop</quote> commands, <command>DROP
+ TYPE</command> in SQL99 requires a <quote>drop behavior</quote>
+ clause to select between dropping all dependent objects or refusing
+ to drop if dependent objects exist:
+<synopsis>
+DROP TYPE <replaceable>name</replaceable> { CASCADE | RESTRICT }
+</synopsis>
+ <productname>PostgreSQL</productname> currently ignores
+ dependencies altogether.
+ </para>
+
+ <para>
+ Note that the <command>CREATE TYPE</command> command and the data
+ type extension mechanisms in <productname>PostgreSQL</productname>
+ differ from SQL99.
+ </para>
+ </refsect1>
+
+ <refsect1 id="SQL-DROPTYPE-see-also">
+ <title>See Also</title>
+
+ <simplelist type="inline">
+ <member><xref linkend="sql-createtype"></member>
+ </simplelist>
</refsect1>
</refentry>