1999-07-22 17:09:15 +02:00
|
|
|
<!--
|
2000-01-29 17:58:54 +01:00
|
|
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/alter_table.sgml,v 1.10 2000/01/29 16:58:27 petere Exp $
|
1999-07-22 17:09:15 +02:00
|
|
|
Postgres documentation
|
|
|
|
-->
|
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refentry id="SQL-ALTERTABLE">
|
|
|
|
<refmeta>
|
1999-07-22 17:09:15 +02:00
|
|
|
<refentrytitle id="sql-altertable-title">
|
1999-07-06 19:16:42 +02:00
|
|
|
ALTER TABLE
|
|
|
|
</refentrytitle>
|
|
|
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
|
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
|
|
<refname>
|
|
|
|
ALTER TABLE
|
|
|
|
</refname>
|
|
|
|
<refpurpose>
|
|
|
|
Modifies table properties
|
|
|
|
</refpurpose>
|
|
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
|
|
<refsynopsisdivinfo>
|
1999-07-22 17:09:15 +02:00
|
|
|
<date>1999-07-20</date>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsynopsisdivinfo>
|
|
|
|
<synopsis>
|
2000-01-29 17:58:54 +01:00
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> [ * ]
|
|
|
|
ADD [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> <replaceable
|
1999-07-06 19:16:42 +02:00
|
|
|
class="PARAMETER">type</replaceable>
|
2000-01-29 17:58:54 +01:00
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> [ * ]
|
|
|
|
ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> { SET DEFAULT <replaceable
|
|
|
|
class="PARAMETER">value</replaceable> | DROP DEFAULT }
|
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> [ * ]
|
|
|
|
RENAME [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> TO <replaceable
|
1999-07-06 19:16:42 +02:00
|
|
|
class="PARAMETER">newcolumn</replaceable>
|
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable>
|
|
|
|
RENAME TO <replaceable class="PARAMETER">newtable</replaceable>
|
|
|
|
</synopsis>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect2 id="R2-SQL-ALTERTABLE-1">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
|
|
|
Inputs
|
|
|
|
</title>
|
|
|
|
<para>
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="PARAMETER"> table </replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The name of an existing table to alter.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="PARAMETER"> column </replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Name of a new or existing column.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="PARAMETER"> type </replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Type of the new column.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="PARAMETER"> newcolumn </replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
New name for an existing column.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="PARAMETER"> newtable </replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2000-01-29 17:58:54 +01:00
|
|
|
New name for the table.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
</para>
|
|
|
|
</refsect2>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect2 id="R2-SQL-ALTERTABLE-2">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
|
|
|
Outputs
|
|
|
|
</title>
|
|
|
|
<para>
|
1998-10-30 20:34:40 +01:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
2000-01-29 17:58:54 +01:00
|
|
|
<term><computeroutput>ALTER</computeroutput></term>
|
1999-07-06 19:16:42 +02:00
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Message returned from column or table renaming.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
2000-01-29 17:58:54 +01:00
|
|
|
<term><computeroutput>ERROR</computeroutput></term>
|
1999-07-06 19:16:42 +02:00
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Message returned if table or column is not available.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
</para>
|
|
|
|
</refsect2>
|
|
|
|
</refsynopsisdiv>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect1 id="R1-SQL-ALTERTABLE-1">
|
|
|
|
<refsect1info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect1info>
|
|
|
|
<title>
|
|
|
|
Description
|
|
|
|
</title>
|
|
|
|
<para>
|
1998-09-16 16:43:12 +02:00
|
|
|
<command>ALTER TABLE</command> changes the definition of an existing table.
|
2000-01-29 17:58:54 +01:00
|
|
|
The <literal>ADD COLUMN</literal> form adds a new column to the table
|
|
|
|
using the same syntax as <xref linkend="SQL-CREATETABLE"
|
|
|
|
endterm="SQL-CREATETABLE-title">. The <literal>ALTER COLUMN</literal> form
|
|
|
|
allows you to set or remove the default for the column. Note that defaults
|
|
|
|
only apply to newly inserted rows.
|
|
|
|
The <literal>RENAME</literal> clause causes the name of a table or column
|
1998-05-13 07:34:00 +02:00
|
|
|
to change without changing any of the data contained in
|
|
|
|
the affected table. Thus, the table or column will
|
|
|
|
remain of the same type and size after this command is
|
|
|
|
executed.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
1998-05-13 07:34:00 +02:00
|
|
|
You must own the table in order to change its schema.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<refsect2 id="R2-SQL-ALTERTABLE-3">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
|
|
|
Notes
|
|
|
|
</title>
|
|
|
|
<para>
|
|
|
|
The keyword <literal>COLUMN</literal> is noise and can be omitted.
|
|
|
|
</para>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
<quote>*</quote> following a name of a table indicates that the statement
|
1999-07-06 19:16:42 +02:00
|
|
|
should be run over that table and all tables below it in the
|
1999-07-22 17:09:15 +02:00
|
|
|
inheritance hierarchy;
|
|
|
|
by default, the attribute will not be added to or renamed in any of the subclasses.
|
|
|
|
|
|
|
|
This should always be done when adding or modifying an attribute in a
|
|
|
|
superclass. If it is not, queries on the inheritance hierarchy
|
|
|
|
such as
|
|
|
|
|
|
|
|
<programlisting>
|
|
|
|
SELECT <replaceable>NewColumn</replaceable> FROM <replaceable>SuperClass</replaceable>*
|
|
|
|
</programlisting>
|
|
|
|
|
|
|
|
will not work because the subclasses will be missing an attribute
|
|
|
|
found in the superclass.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
2000-01-29 17:58:54 +01:00
|
|
|
In the current implementation, default and constraint clauses for the
|
|
|
|
new column will be ignored. You can use the <literal>SET DEFAULT</literal>
|
|
|
|
form of <command>ALTER TABLE</command> to set the default later.
|
|
|
|
(You will also have to update the already existing rows to the
|
|
|
|
new default value, using <xref linkend="sql-update-title"
|
|
|
|
endterm="sql-update-title">.)
|
1999-07-22 17:09:15 +02:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
You must own the class in order to change its schema.
|
|
|
|
Renaming any part of the schema of a system
|
|
|
|
catalog is not permitted.
|
1998-09-22 17:48:03 +02:00
|
|
|
The <citetitle>PostgreSQL User's Guide</citetitle> has further
|
1999-07-06 19:16:42 +02:00
|
|
|
information on inheritance.
|
|
|
|
</para>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
|
|
|
Refer to <command>CREATE TABLE</command> for a further description
|
|
|
|
of valid arguments.
|
|
|
|
</para>
|
|
|
|
</refsect2>
|
|
|
|
</refsect1>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect1 id="R1-SQL-ALTERTABLE-2">
|
|
|
|
<title>
|
|
|
|
Usage
|
|
|
|
</title>
|
|
|
|
<para>
|
1998-05-13 07:34:00 +02:00
|
|
|
To add a column of type VARCHAR to a table:
|
1999-07-06 19:16:42 +02:00
|
|
|
<programlisting>
|
|
|
|
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
1998-05-13 07:34:00 +02:00
|
|
|
To rename an existing column:
|
1999-07-06 19:16:42 +02:00
|
|
|
<programlisting>
|
|
|
|
ALTER TABLE distributors RENAME COLUMN address TO city;
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
1998-05-13 07:34:00 +02:00
|
|
|
To rename an existing table:
|
1999-07-06 19:16:42 +02:00
|
|
|
<programlisting>
|
|
|
|
ALTER TABLE distributors RENAME TO suppliers;
|
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
</refsect1>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect1 id="R1-SQL-ALTERTABLE-3">
|
|
|
|
<title>
|
|
|
|
Compatibility
|
|
|
|
</title>
|
1998-05-13 07:34:00 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect2 id="R2-SQL-ALTERTABLE-4">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-04-15</date>
|
|
|
|
</refsect2info>
|
2000-01-29 17:58:54 +01:00
|
|
|
<title>SQL92</title>
|
|
|
|
<para>
|
|
|
|
The <literal>ADD COLUMN</literal> form is compliant with the exception that
|
|
|
|
it does not support defaults and constraints, as explained above.
|
|
|
|
The <literal>ALTER COLUMN</literal> form is in full compliance.
|
|
|
|
</para>
|
1998-09-16 16:43:12 +02:00
|
|
|
|
2000-01-29 17:58:54 +01:00
|
|
|
<para>
|
|
|
|
SQL92 specifies some additional capabilities for <command>ALTER TABLE</command>
|
|
|
|
statement which are not yet directly supported by <productname>PostgreSQL</productname>:
|
1998-05-13 07:34:00 +02:00
|
|
|
|
2000-01-29 17:58:54 +01:00
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<synopsis>
|
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> ADD <replaceable class="PARAMETER">table constraint definition</replaceable>
|
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> DROP CONSTRAINT <replaceable class="PARAMETER">constraint</replaceable> { RESTRICT | CASCADE }
|
1999-07-06 19:16:42 +02:00
|
|
|
</synopsis>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2000-01-29 17:58:54 +01:00
|
|
|
Adds or removes a table constraint (such as a check constraint,
|
|
|
|
unique constraint, or foreign key constraint). To create
|
|
|
|
or remove a unique constraint, create or drop a unique index,
|
|
|
|
respectively (see <xref linkend="SQL-CREATEINDEX" endterm="SQL-CREATEINDEX-title">).
|
|
|
|
To change other kinds of constraints you need to recreate
|
|
|
|
and reload the table, using other parameters to the
|
|
|
|
<xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-title">
|
|
|
|
command.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
<para>
|
2000-01-29 17:58:54 +01:00
|
|
|
For example, to drop any constraints on a table <literal>distributors</literal>:
|
1999-07-06 19:16:42 +02:00
|
|
|
<programlisting>
|
1998-05-13 07:34:00 +02:00
|
|
|
CREATE TABLE temp AS SELECT * FROM distributors;
|
|
|
|
DROP TABLE distributors;
|
|
|
|
CREATE TABLE distributors AS SELECT * FROM temp;
|
|
|
|
DROP TABLE temp;
|
1999-07-06 19:16:42 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<synopsis>
|
2000-01-29 17:58:54 +01:00
|
|
|
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> DROP [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> { RESTRICT | CASCADE }
|
1999-07-06 19:16:42 +02:00
|
|
|
</synopsis>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Removes a column from a table.
|
|
|
|
Currently, to remove an existing column the table must be
|
|
|
|
recreated and reloaded:
|
|
|
|
<programlisting>
|
1998-05-13 07:34:00 +02:00
|
|
|
CREATE TABLE temp AS SELECT did, city FROM distributors;
|
|
|
|
DROP TABLE distributors;
|
|
|
|
CREATE TABLE distributors (
|
|
|
|
did DECIMAL(3) DEFAULT 1,
|
|
|
|
name VARCHAR(40) NOT NULL,
|
|
|
|
);
|
|
|
|
INSERT INTO distributors SELECT * FROM temp;
|
|
|
|
DROP TABLE temp;
|
1999-07-06 19:16:42 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
2000-01-29 17:58:54 +01:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The clauses to rename columns and tables are <productname>PostgreSQL</productname>
|
|
|
|
extensions. SQL92 does not provide for them.
|
|
|
|
</para>
|
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsect2>
|
|
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
|
|
|
mode: sgml
|
|
|
|
sgml-omittag:nil
|
|
|
|
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:
|
|
|
|
-->
|