備忘録的プログラミングリファレンス

テーブルの列を変更 ALTER TABLE、ALTER COLUMN、TYPE

 テーブルの列(カラム)を変更するは、ALTERコマンドとカラムを指定したALTERコマンドを組み合わせます。

 ここではカラムのデータタイプを変更する方法を紹介します。データタイプを変更するにはTYPEを指定します。

テーブルの列のタイプを変更
ALTER TABLE table_name ALTER COLUMN column_name TYPE column_type;

Example

 例えば、テーブルを作成しそのotherカラムのデータタイプを変更します。まず以下のようなテーブルを用意します。

 以下はPostgreSQLでの使い方です。

テーブルを作成
CREATE TABLE example_table
(
	id			INT
	,title 	varchar(16)
	,other	INT
);

 テーブルのカラムを確認してみます。

カラムのデータタイプを確認
=> \d example_table
                  Table "public.example_table"
 Column |         Type          | Collation | Nullable | Default
--------+-----------------------+-----------+----------+---------
 id     | integer               |           |          |
 title  | character varying(16) |           |          |
 other  | integer               |           |          |

 ALTER、ALTERコマンドでotherカラムのタイプを変更します。

otherカラムのタイプを変更
ALTER TABLE example_table ALTER COLUMN other TYPE VARCHAR(8);

 変更されたかテーブルのレコードを確認してみます。

テーブルのレコードを確認
=> \d example_table
	Table "public.example_table"
Column |         Type          | Collation | Nullable | Default
--------+-----------------------+-----------+----------+---------
id     | integer               |           |          |
title  | character varying(16) |           |          |
other  | character varying(8)  |           |          |

 テーブルの列のタイプを変更するにはALTER TABLE、ALTER COLUMNとTYPEを組み合わせます。 カラムのタイプによっては変更できない場合があります。

 例えば、上記のotherカラムをINTタイプに変更するとします。

テーブルのカラムタイプ変更時のエラー
=> ALTER TABLE example_table ALTER COLUMN other TYPE INT;
ERROR:  column "other" cannot be cast automatically to type integer
HINT:  You might need to specify "USING other::integer".

 このようなエラーが出ることがあります。

 このHINTのようにコマンドを実行することができますが、変更されるカラムデータをINT型に強制的に変更します。データ値が変ることに注意が必要です。

テーブルのカラムタイプを強制的に変更(*ただし、データが強制的に変更される)
=> ALTER TABLE example_table ALTER COLUMN other TYPE INT USING other::integer;