【问题标题】:MultiPolygon column by migration迁移的 MultiPolygon 列
【发布时间】:2014-06-21 01:52:34
【问题描述】:

我正在尝试将我的 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

感谢您的帮助。

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 效果很好,谢谢!顺便说一句,我真的需要使用迁移,因为我可以在我的开发环境中这样做,但对于生产环境,我不能。我将尝试找到此迁移的解决方案,如果找到解决方案,我将在此处添加解决方案。
【解决方案2】:

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

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

【讨论】:

  • 遇到了同样的问题。奇怪的是它说类型不存在而不是说它不能转换。
猜你喜欢
  • 2018-08-15
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2011-02-17
相关资源
最近更新 更多