MultiPolygon列通过迁移

时间:2014-05-04 20:05:46

标签: ruby-on-rails postgresql migration polygon postgis

我尝试将polygon列类型更改为multipolygon列类型。

我的代码很简单。

change_column :messages, :area_shape, :multipolygon, srid: 3785

但是Postgres并不知道这种类型。我认为我在PostGIS配置上遗漏了一些内容,但我无法看到它。

这是我的确切错误:

rake aborted!
PG::UndefinedObject: ERROR:  type "multipolygon" does not exist
: ALTER TABLE "messages" ALTER COLUMN "area_shape" TYPE multipolygon

这就是我将area_shape创建为polygon类型的方式:

add_column :messages, :area_shape, :polygon, srid: 3785

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我不知道RGeo如何尝试实现change_column(是否有文档?),但由于没有multipolygon类型,因此不正确。

如果您可以直接访问PostgreSQL,请在this answer之后使用此DDL:

ALTER TABLE my_table
  ALTER COLUMN area_shape TYPE geometry(MultiPolygon,3785)
    USING ST_Multi(area_shape);

答案 1 :(得分:1)

最后我必须删除然后重新创建我的列:

remove_column :messages, :area_shape
add_column :messages, :area_shape, :multi_polygon, srid: 3785

我想我现在可以理解为什么它不可能了。实际上,似乎很难将polygon类型更改为multi_polygon类型而不会丢失数据逻辑。

如果您确实需要更改类型,可以使用@Mike所说的内容(手动)并创建一个小方法将polygon转换为multi_polygon,但它并不是真的安全在我的脑海里。 提示:multi_polygon类型为Enumerable,表示multi_polygon接受Array类型。