我尝试将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
感谢您的帮助。
答案 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
类型。