<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/alter_table.sgml,v 1.6 2001/09/12 02:14:30 t-ishii Exp $
Postgres documentation
-->

<refentry id="SQL-ALTERTABLE">
 <refmeta>
  <refentrytitle id="sql-altertable-title">
   ALTER TABLE
  </refentrytitle>
  <refmiscinfo>SQL<!-- Language Statements -->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   ALTER TABLE
  </refname>
  <refpurpose>
   <!-- Modifies table properties -->
   テーブルのプロパティを更新します。<indexterm><primary>ALTER TABLE</primary></indexterm><indexterm><primary>SQL</primary><secondary>ALTER TABLE</secondary></indexterm><indexterm><primary sortas="てーぶる">テーブル</primary><secondary sortas="ぷろぱてぃのへんこう">プロパティの変更</secondary></indexterm>
  </refpurpose>
 </refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-07-20</date>
  </refsynopsisdivinfo>
<synopsis>
ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">table</replaceable> [ * ]
    ADD [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> <replaceable class="PARAMETER">type</replaceable>
ALTER TABLE [ ONLY ] <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 class="PARAMETER">newcolumn</replaceable>
ALTER TABLE <replaceable class="PARAMETER">table</replaceable>
    RENAME TO <replaceable class="PARAMETER">newtable</replaceable>
ALTER TABLE <replaceable class="PARAMETER">table</replaceable>
    ADD <replaceable class="PARAMETER">table constraint definition</replaceable>
ALTER TABLE <replaceable class="PARAMETER">table</replaceable>
	OWNER TO <replaceable class="PARAMETER">new owner</replaceable> 
</synopsis>

  <refsect2 id="R2-SQL-ALTERTABLE-1">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
    <!-- Inputs -->入力
   </title>

    <variablelist>
     <varlistentry>
      <term><replaceable class="PARAMETER"> table </replaceable></term>
      <listitem>
       <para>
	<!-- The name of an existing table to alter. -->
        更新対象の既存のテーブルの名前です。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER"> column </replaceable></term>
      <listitem>
       <para>
	<!-- Name of a new or existing column. -->
        新規または既存の列の名前です。 
 
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER"> type </replaceable></term>
      <listitem>
       <para>
	<!-- Type of the new column. -->
        新しい列の型です。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER"> newcolumn </replaceable></term>
      <listitem>
       <para>
	<!-- New name for an existing column. -->
        既存の列の新しい名前です。 

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER"> newtable </replaceable></term>
      <listitem>
       <para>
	<!-- New name for the table. -->
        テーブルの新しい名前です。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER"> table constraint definition </replaceable></term>
      <listitem>
       <para>
	<!-- New table constraint for the table -->
        テーブルの新しいテーブル制約です。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER">New user </replaceable></term>
      <listitem>
       <para>
	<!-- The user name of the new owner of the table. -->
        テーブルの新しい所有者のユーザー名です。

       </para>
      </listitem>
     </varlistentry>

    </variablelist>
  </refsect2>

  <refsect2 id="R2-SQL-ALTERTABLE-2">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
    <!-- Outputs -->出力
   </title>

    <variablelist>
     <varlistentry>
      <term><computeroutput>ALTER</computeroutput></term>
      <listitem>
       <para>
	<!-- Message returned from column or table renaming. -->
        列名またはテーブル名が更新されたとき返されるメッセージです。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>ERROR</computeroutput></term>
      <listitem>
       <para>
	<!-- Message returned if table or column is not available. -->
        テーブルまたは列が有効でない場合に返されるメッセージです。 

       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>
 </refsynopsisdiv>

 <refsect1 id="R1-SQL-ALTERTABLE-1">
  <refsect1info>
   <date>1998-04-15</date>
  </refsect1info>
  <title>
   <!-- Description -->説明
  </title>
  <para>
   <!-- 
   <command>ALTER TABLE</command> changes the definition of an existing table.
   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
   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.
   The ADD <replaceable class="PARAMETER">table constraint definition</replaceable> clause 
   adds a new constraint to the table using the same syntax as <xref
   linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-title">. 
   The OWNER clause chnages the owner of the table to the user <replaceable class="PARAMETER">
   new user</replaceable>. -->

   <command>ALTER TABLE</command>は既存のテーブルの定義を変更します。<literal>ADD COLUMN</literal>書式は<xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-title">と同じ構文を使って新しい列をテーブルに追加します。<literal>ALTER COLUMN</literal>書式で列のデフォルトを設定または解除することができます。デフォルトは新しく挿入された行にのみ適用されることに注意してください。<literal>RENAME</literal>句を使用して対象とするテーブルに含まれるデータまったく変更することなく、テーブルもしくは列の名前を変更することができます。したがって、そのテーブルまたは列は、このコマンドが実行された後でも同じ型とサイズのままです。ADD <replaceable class="PARAMETER">table constraint definition</replaceable>句は、<xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-title">と同じ構文を使ってテーブルに新しい制約を追加します。OWNER句はテーブルの所有者を<replaceable class="PARAMETER"> new user</replaceable>に変更します。<indexterm><primary>ADD COLUMN</primary></indexterm><indexterm><primary>ALTER COLUMN</primary></indexterm>

  </para>

  <para>
   <!-- You must own the table in order to change its schema. -->
   テーブルのスキーマを変更するためには、そのテーブルを所有していなければなりません。 
  </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.
    -->
    <literal>COLUMN</literal>キーワードはノイズであり、省略可能です。
   </para>

   <para>
    <!--
    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"
    endterm="sql-update-title">.) -->

    現在の実装では、新しい列のデフォルトと制約句は無視されます。<command>ALTER TABLE</command>の<literal>SET DEFAULT</literal>句を使って後でデフォルトを設定することができます（<xref linkend="sql-update" endterm="sql-update-title">を使って既存の行も新しいデフォルト値に更新しなければなりません）。<indexterm><primary>SET DEFAULT</primary></indexterm>

   </para>

   <para>
    <!-- 
    In the current implementation, only FOREIGN KEY constraints can
    be added to a table.  To create or remove a unique constraint, create 
    a unique index (see <xref linkend="SQL-CREATEINDEX" 
    endterm="SQL-CREATEINDEX-title">).  To add check constraints
    you need to recreate and reload the table, using other 
    parameters to the <xref linkend="SQL-CREATETABLE" 
    endterm="SQL-CREATETABLE-title"> command. -->

    現在の実装では、FOREIGN KEY制約のみテーブルに追加することができます。一意な制約を作成または削除するためには一意なインデックスを作成します（<xref linkend="SQL-CREATEINDEX" endterm="SQL-CREATEINDEX-title">を参照してください）。検査制約を追加するには、<xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-title">コマンドの別のパラメータを使ってテーブルを再作成し、再ロードする必要があります。

   </para>

   <para>
    <!-- You must own the table in order to change it.
    Renaming any  part  of  the schema of a system
    catalog is not permitted.
    The <citetitle>PostgreSQL User's Guide</citetitle> has further
    information on inheritance. -->

    テーブルを変更するためにはそのテーブルを所有していなければいけません。システムカタログのスキーマのいかなる部分の名前も変更することは許可されていません。<citetitle>&user-guide;</citetitle>に、継承に関するさらに詳しい情報があります。

   </para>

   <para>
    <!-- 
    Refer to <command>CREATE TABLE</command> for a further description
    of valid arguments. -->

    有効な引数の詳しい説明は<command>CREATE TABLE</command>を参照してください。

   </para>
  </refsect2>
 </refsect1>

 <refsect1 id="R1-SQL-ALTERTABLE-2">
  <title>
   <!-- Usage -->使用方法
  </title>
  <para>
   <!-- To add a column of type VARCHAR to a table: -->
   VARCHAR型の列をテーブルに追加するには、以下のようにします。
</para>

<programlisting>
ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
</programlisting>

  <para>
   <!-- To rename an existing column: -->
   既存の列の名前を変えるには、以下のようにします。
</para>

<programlisting>
ALTER TABLE distributors RENAME COLUMN address TO city;
</programlisting>

  <para>
   <!-- To rename an existing table: -->
   既存のテーブルの名前を変更するには、以下のようにします。
</para>

<programlisting>
ALTER TABLE distributors RENAME TO suppliers;
</programlisting>

  <para> 
   <!-- To add a foreign key constraint to a table: -->
   外部キー制約をテーブルに追加するには、以下のようにします。
</para>

<programlisting>
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;
</programlisting>
 </refsect1>

 <refsect1 id="R1-SQL-ALTERTABLE-3">
  <title>
   <!-- Compatibility -->互換性
  </title>

  <refsect2 id="R2-SQL-ALTERTABLE-4">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <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.
     -->

     <literal>ADD COLUMN</literal>書式は、上記で説明されたようにデフォルトと制約をサポートしないという例外はありますが、規則に従っています。<literal>ALTER COLUMN</literal>書式は完全にルールどおりです。
 
    </para>

    <para>
     <!-- SQL92 specifies some additional capabilities for 
     <command>ALTER TABLE</command>
     statement which are not yet directly supported by 
     <productname>Postgres</productname>: -->

     SQL92では、以下のような、まだ<productname>Postgres</productname>に直接サポートされていない<command>ALTER TABLE</command>文の追加機能が指定されています。

    <variablelist>
     <varlistentry>
      <term>DROP CONSTRAINT</term>
     <listitem>
<synopsis>
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> DROP CONSTRAINT <replaceable class="PARAMETER">constraint</replaceable> { RESTRICT | CASCADE }
</synopsis>
      <para>
       <!-- Removes a table constraint (such as a check constraint,
       unique constraint, or foreign key constraint). To 
       remove a unique constraint, drop a unique index.
       To remove 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. -->

       テーブル制約（検査制約、一意性制約、外部キー制約など）を削除します。一意性制約を削除するためには、一意インデックスを削除します。他の種類の制約を削除するには、<xref linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-title">コマンドの別のパラメータを使ってテーブルを再作成し再ロードする必要があります。

      </para>
      <para>

       <!-- For example, to drop any constraints on a table 
       <literal>distributors</literal>: -->

       たとえば、テーブル<literal>distributors</literal>の制約を削除するためには下記のようにします。
</para>

<programlisting>
CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;
</programlisting>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term>DROP COLUMN</term>
     <listitem>
<synopsis>
ALTER TABLE <replaceable class="PARAMETER">table</replaceable> DROP [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> { RESTRICT | CASCADE }
</synopsis>
      <para>
       <!-- Removes a column from a table.
       Currently, to remove an existing column the table must be
       recreated and reloaded: -->

       テーブルから列を削除します。現在では、既存の列を削除するためには以下のように、テーブルを再作成してから再ロードしなくてはなりません。
</para>

<programlisting>
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;
</programlisting>
     </listitem>
    </varlistentry>
   </variablelist>
   </para>

   <para>
    <!-- 
    The clauses to rename columns and tables are 
    <productname>Postgres</productname>
    extensions from SQL92. -->

    列とテーブルの名前を変更する句はSQL92からの<productname>Postgres</productname>の拡張です。

   </para>
 
  </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:
-->
