/ / Rails + Postgis: Fehler kann nicht die Tabelle "raum_ref_sys" löschen - Ruby-on-Schienen, Postgresql, Postgis

Rails + Postgis: Fehler kann Tabelle nicht löschen spatial_ref_sys - ruby-on-rails, postgresql, postgis

Schienen 5
Postgresql 9.4.10
Postgis 2.1.8

Wenn ich Rake db: reset versuche, wird in der Konsole ein Fehler angezeigt

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

Ich bin neu bei Psql und Postgis, jede Hilfe wird geschätzt.

Antworten:

4 für die Antwort № 1

Ich bin auf dieses Problem gestoßen, als ich eine Migration mit erstellte enable_extension :postgis. Dies hatte den beabsichtigten Effekt, die Erweiterung zu aktivieren, aber es hat auch meine aktualisiert db/schema.rb Datei, um dies aufzunehmen spatial_ref_sys Tabelle, die von postgis benötigt wird.

Das wollen wir aber nicht db/schema.rb Datei, um diese Tabelle aufzunehmen, da dann eine db:drop oder db:reset wird versuchen, die Tabelle zu entfernen, und wir erhalten diesen Fehler.

Damit die Schienen diese Tabelle ignorieren können, können Sie am Ende von Folgendes hinzufügen config/environment.rb:

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

Vergessen Sie nicht, das zu entfernen create_table Aussage von db/schema.rb.


0 für die Antwort № 2

Diese spezielle Tabelle wird mit der Erweiterung PostGIS geliefert. Es wurde automatisch hinzugefügt. Ihre schema.rb enthält wahrscheinlich folgende Zeile: create_table "spatial_ref_sys", primary_key: "srid", id: :integer, force: :cascade do |t|

Dann versuchen Sie, Ihre Datenbank mit neu zu erstellen rake db:reset oder erstellen Sie vielleicht eine Testdatenbank mit rake. weil force Die Option ist so eingestellt, dass die vorhandene Tabelle zuerst gelöscht wird. Sie wird jedoch von postgis benötigt.

Die schnelle Lösung besteht darin, diese Tabelle in einem Initialisierungsprogramm zu ignorieren:

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

Dann renne rake db:migrate um dein schema.rb zu aktualisieren und es ist fertig.

Es ist jedoch wahrscheinlicher, dass Sie mit einigen PostGIS-Funktionen mit gem arbeiten möchten aktiverecord-postgis-adapter. Es wird auch schema.rb für Sie reparieren.