2016-11-30 15 views
5

Rails 5
PostgreSQL 9.4.10
PostGIS 2.1.8
Rails + PostGIS: Lỗi không thể thả bảng spatial_ref_sys

khi tôi cố gắng rake db: thiết lập lại, giao diện điều khiển hiển thị một lỗi

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 

Tôi mới sử dụng psql và postgis, mọi trợ giúp sẽ được đánh giá cao.

+0

Bạn có thể tham khảo bảng ở đâu đó –

+0

Bạn có bất kỳ mối quan hệ 'has_many' nào được cài đặt với mô hình SpatialRefSys không? – Viro

Trả lời

3

Tôi gặp vấn đề tương tự khi tạo di chuyển với enable_extension :postgis. Điều này có tác dụng dự định cho phép tiện ích mở rộng, nhưng nó cũng đã cập nhật tệp db/schema.rb của tôi để bao gồm bảng spatial_ref_sys này, được yêu cầu bởi postgis.

Tuy nhiên, chúng tôi không muốn tệp db/schema.rb bao gồm bảng này, vì sau đó, db:drop hoặc db:reset sẽ thử và xóa bảng và chúng tôi sẽ gặp phải lỗi này.

Để nói đường ray để bỏ qua bảng này, chúng ta có thể thêm dòng sau vào cuối config/environment.rb:

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

Ngoài ra, đừng quên để loại bỏ các tuyên bố create_table từ db/schema.rb.

0

Bảng đặc biệt này đi kèm với phần mở rộng PostGIS. Nó đã được thêm tự động. schema.rb của bạn có thể chứa dòng: create_table "spatial_ref_sys", primary_key: "srid", id: :integer, force: :cascade do |t|

Sau đó, bạn cố gắng tái tạo lại cơ sở dữ liệu của bạn với rake db:reset hoặc có thể tạo ra một cơ sở dữ liệu thử nghiệm với rake. Bởi vì force tùy chọn được thiết lập nó đầu tiên thả bảng hiện có nhưng nó được yêu cầu bởi postgis.

Các giải pháp nhanh chóng là để bỏ qua bảng này trong một số initializer:

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

Sau đó chạy rake db:migrate để làm mới schema.rb của bạn và hoàn thành công việc.

Nhưng nhiều khả năng bạn sẽ muốn làm việc với một số tính năng của PostGIS bằng cách sử dụng đá quý activerecord-postgis-adapter. Nó cũng sẽ sửa chữa schema.rb cho bạn.

Các vấn đề liên quan