【问题标题】:Amazon RDS Rails postgis extension exists but type "geometry" does not exist存在 Amazon RDS Rails postgis 扩展,但类型“几何”不存在
【发布时间】:2023-01-20 16:51:14
【问题描述】:

我很难在 RDS 服务器上使用 postgis。

扩展名“postgis”存在并且数据被正确记录。

record.update(lonlat: 'POINT(2.4214133 48.7364525)')
=> true
record.lonlat
=> #<RGeo::Geographic::SphericalPointImpl:0x30fe8 "POINT (2.4214133 48.7364525)">

但是当我想运行空间查询时,

Records.where("ST_DWithin(records.lonlat, 'POINT(-1.548977 47.216369)'::GEOMETRY, '10000'::INTEGER)")

我得到以下信息:

ActiveRecord::StatementInvalid (PG::UndefinedObject: ERROR:  type "geometry" does not exist)

我试图删除扩展并重新创建它,但我不想删除数据,所以我似乎不能:

ActiveRecord::StatementInvalid (PG::DependentObjectsStillExist: ERROR:  cannot drop extension postgis because other objects depend on it)

postgis 专用于搜索路径中包含的不同模式,我确实授予了对该模式的所有权限。

在本地和 heroku 上它都可以正常工作。

我们使用 gem activerecord-postgis-adapter

这是我的 database.yml url 行:

url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres(ql)?/, "postgis") %>

【问题讨论】:

    标签: ruby-on-rails amazon-rds postgis


    【解决方案1】:

    你是如何连接到你的数据库的,你能分享你的config/database.yml吗?开箱即用的 ActiveRecord 可能不支持某些 postgis 功能。

    我们使用activerecord-postgis-adapter并且必须指定数据库的适配器是postgis而不是postgres,正如gem docs中所推荐的(我们实际上是通过在数据库@987654328中用postgis代替postgres来做到这一点的@,所以它看起来像postgis://user:password@rds.instance.amazonaws.com/dbname,但原理是一样的:

    # config/database.yml
    production: &default
      url: <%= ENV.fetch('DATABASE_URL', '').sub(/^postgres/, "postgis") %>
    

    【讨论】:

    • 您好@omnikron,谢谢您的回答,我应该添加此信息,我们使用相同的 gem 并在配置中也替换了 url。
    猜你喜欢
    • 2019-08-19
    • 2011-10-14
    • 2014-10-06
    • 2019-11-04
    • 2014-03-17
    • 2020-10-28
    • 2020-09-26
    • 2017-11-18
    • 2015-08-26
    相关资源
    最近更新 更多