Mar*_*rco 6 postgresql postgis ruby-on-rails
Rails 5
Postgresql 9.4.10
Postgis 2.1.8
当我尝试rake db:reset时,控制台显示错误
Run Code Online (Sandbox Code Playgroud)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的新手,任何帮助将不胜感激.
当我使用enable_extension :postgis. 这具有启用扩展的预期效果,但它也更新了我的db/schema.rb文件以包含spatial_ref_syspostgis 所需的此表。
但是,我们不希望db/schema.rb文件包含这个表,因为这样 a db:dropordb:reset会尝试删除该表,我们会得到这个错误。
要告诉 rails 忽略此表,我们可以在 末尾添加以下内容config/environment.rb:
ActiveRecord::SchemaDumper.ignore_tables = ["spatial_ref_sys"]
Run Code Online (Sandbox Code Playgroud)
另外,不要忘记create_table从db/schema.rb.
这个特殊的表带有 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)
Run Code Online (Sandbox Code Playgroud)
然后运行rake db:migrate刷新您的 schema.rb 就完成了。
但更有可能的是,您希望使用 gem activerecord-postgis-adapter来使用一些 PostGIS 功能。它还将为您修复 schema.rb。
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |