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