【PostgreSQL】default for column “〇〇” cannot be cast automatically to type integer の対処法!

varchar型をint型にしようとしたらエラーが発生

「skill_code」という文字列型のカラムを数値型に変更しようと思い、以下を実行した。

ALTER TABLE users
 ALTER COLUMN skill_code TYPE INT USING skill_code::integer;

すると、エラーが発生してしまった。

details: pq: default for column "skill_code" cannot be cast automatically to type integer

特にコマンドは間違ってないはずだが。。。なぜ?

原因&解決方法

結論から言うと、原因はskill_codeというカラムにDefault制約が貼られていたから

なので、まずはDefault制約を剥がす必要がある。そしてその後にカラム型を変更する。

ALTER TABLE users
 ALTER COLUMN skill_code DROP DEFAULT,  //Default制約削除
 ALTER COLUMN skill_code TYPE INT USING skill_code::integer;  //文字列カラムを数値カラムに変更

コマンドを上記のように修正したところ、期待通りにskill_codeカラムが文字列型から数値型に変更することができた。

タイトルとURLをコピーしました