ruby on rails - MultiPolygon column by migration



我试图将我的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

谢谢你的帮助。

我不知道RGeo如何尝试实现change_column(有文档吗?),但这是不正确的,因为没有这样的multipolygon类型。

如果你有直接访问PostgreSQL的权限,根据这个答案,使用这个DDL:

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

最后我不得不删除然后重新创建我的列:

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类型。

最新更新