Postgreesでは通常、カラムの型を変更するには以下のコマンドを使用する。詳しくはドキュメントを参照。
ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
普通は型変換も自動でやってくれるらしいのだけども、昨日試したときには日付の型変換が上手くいかず、
より複雑な変換が必要な場合、古い値から新しい値をどのように計算するかを指定するUSING句を付けることができます。
というのもちょっとわからなかった(調べてないだけだが)ので、カラムを追加してUPDATEしてリネームするという力技で対処した。
以下の例では foo をtext型からtimestamp型へ変更している。
alter table hoge_table add column foo_after timestamp without time zone;
update hoge_table set foo_after = to_timestamp(foo, 'YYYY-MM-DD HH24:MI:SS');
alter table hoge_table drop foo;
alter table hoge_table rename foo_after to foo;
カラムの型を変えるなんてこと自体がよろしくない気もするけど諸事情によりこのような手を取る羽目になったのでメモ。
Sponsored Link