【问题标题】:Rails + Postgis: error cannot drop table spatial_ref_sysRails + Postgis:错误无法删除表 spatial_ref_sys
【发布时间】:2017-04-14 10:12:30
【问题描述】:

导轨 5
Postgresql 9.4.10
Postgis 2.1.8

当我尝试 rake db:reset 时,控制台显示错误

rake aborted! ActiveRecord::StatementInvalid:
PG::DependentObjectsStillExist: ERROR:  cannot drop table
spatial_ref_sys because extension postgis requires it HINT:  You can
drop extension postgis instead. : DROP TABLE "spatial_ref_sys" CASCADE

我是 psql 和 postgis 的新手,我们将不胜感激。

【问题讨论】:

  • 您可能在某处引用该表
  • 您是否与 SpatialRefSys 模型建立了任何 has_many 关系?

标签: ruby-on-rails postgresql postgis


【解决方案1】:

这个特殊的表格带有 PostGIS 扩展。它是自动添加的。您的 schema.rb 可能包含以下行:create_table "spatial_ref_sys", primary_key: "srid", id: :integer, force: :cascade do |t|

然后您尝试使用rake db:reset 重新创建您的数据库,或者使用rake 创建一个测试数据库。因为设置了force 选项,所以它首先删除现有表,但它是 postgis 所必需的。

快速的解决方案是在一些初始化程序中忽略此表:

::ActiveRecord::SchemaDumper.ignore_tables |= %w(spatial_ref_sys)

然后运行 ​​rake db:migrate 来刷新你的 schema.rb 就完成了。

但您更有可能希望使用 gem activerecord-postgis-adapter 来处理一些 PostGIS 功能。它还将为您修复 schema.rb。

【讨论】:

    【解决方案2】:

    我在使用 enable_extension :postgis 创建迁移时遇到了同样的问题。这具有启用扩展的预期效果,但它也更新了我的 db/schema.rb 文件以包含这个 spatial_ref_sys 表,这是 postgis 所需的。

    但是,我们不希望 db/schema.rb 文件包含此表,因为 db:dropdb:reset 将尝试删除该表,我们会收到此错误。

    为了让rails忽略这个表,我们可以在config/environment.rb的末尾添加以下内容:

    ActiveRecord::SchemaDumper.ignore_tables = ["spatial_ref_sys"]
    

    另外,不要忘记从db/schema.rb 中删除create_table 语句。

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2011-02-22
      • 2018-05-15
      • 2011-02-09
      • 2016-02-03
      • 1970-01-01
      • 2022-11-11
      • 2014-01-29
      • 2013-03-04
      相关资源
      最近更新 更多