我的Postgres数据库中有一列类型为Varchar的列,我本想是整数...,现在我想更改它们,但是不幸的是,这在我的rails迁移中似乎不起作用。
change_column :table1, :columnB, :integer
哪个似乎输出此SQL:
ALTER TABLE table1 ALTER COLUMN columnB TYPE integer
所以我尝试这样做:
execute 'ALTER TABLE table1 ALTER COLUMN columnB TYPE integer USING CAST(columnB AS INTEGER)'
但强制转换在这种情况下不起作用,因为某些列为空...
有任何想法吗?
错误:
PGError: ERROR: invalid input syntax for integer: ""
: ALTER TABLE table1 ALTER COLUMN columnB TYPE integer USING CAST(columnB AS INTEGER)
Postgres v8.3
最佳答案
听起来问题是表中有空字符串。您可能需要使用case语句来处理这些问题,例如:execute %{ALTER TABLE "table1" ALTER COLUMN columnB TYPE integer USING CAST(CASE columnB WHEN '' THEN NULL ELSE columnB END AS INTEGER)}
更新:根据更新的问题完全重写。