我的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)}
更新:根据更新的问题完全重写。

07-24 09:45
查看更多