ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PostgreSQL 文字列型から日付型への型の変更方法

データベースのテーブルに、仮で用意していたカラムがあり、利用しようとしたら、型の変更が必要になりました。
データベースは、PostgreSQL 12です。

仮でカラムを作成したときに、character varyingを指定していて、利用していないので値はNULLになっています。
カラムの名前の変更は、

ALTER TABLE data_table RENAME COLUMN dummy1 TO start_date;

で変更できました。
www.postgresql.jp

プログラミング中
Photo by XPS on Unsplash

カラムの型の変更は、

ALTER TABLE data_table ALTER COLUMN start_date TYPE date;

を実行すると、

ALTER TABLE data_table ALTER COLUMN start_date TYPE date
column "start_date" cannot be cast automatically to type date

が表示されました。

値がnullでも、型の変更ができなかったので、どうすればいいかと検索しました。
検索した結果、USINGを使ってnullを値として指定すれば、できそうとわかったので、

ALTER TABLE data_table ALTER COLUMN start_date TYPE date USING null;

として実行したら、変更ができました。


今回は、未利用のカラムの型変更で、値を引き継がなくて済むので、USING nullの追加で済みました。
値を引き継がなければならない場合は、複雑な処理が必要になりそうです。