12

レールを使った地理空間分析に関するダニエル・アズマの話をフォローしていrake db:migrateましたが、2番目のプロジェクトで実行するたびに問題が発生します。

セットアップの詳細は次のとおりです。Postgresのバージョン9.1.3とPostGISの2.0.0を提供するPostgres.appを使用してPostgresqlを実行しています。database.ymlファイルと移行の実行でいくつかの問題が発生しました。(私は関連する宝石を追加し、application.rbにそれらの情報を要求しました)

私のdatabase.ymlファイルは次のようになります:

 development:
   adapter: postgis
   postgis_extension: true
   host: localhost
   encoding: unicode
   database: my_app_development
   pool: 5
   username: my_app
   password:

次の行を追加すると、次のようschema_search_path: "public,postgis"になります。

 rake aborted!
 PG::Error: ERROR:  schema "postgis" does not exist
 : SET search_path TO public,postgis

その行を削除すると、データベースを移行しようとしたときに次のエラーが発生します。

rake aborted!
PG::Error: ERROR:  relation "geometry_columns" does not exist
LINE 1: SELECT * FROM geometry_columns WHERE f_table_name='schema_mi...                       ^
: SELECT * FROM geometry_columns WHERE f_table_name='schema_migrations'

誰かがこれらの問題を修正する方法についてアイデアを持っていますか?

4

6 に答える 6

18

PostGIS拡張機能をパブリックスキーマにドロップし、postgisスキーマで再作成します。

DROP EXTENSION PostGIS;

CREATE SCHEMA postgis;
CREATE EXTENSION PostGIS WITH SCHEMA postgis;
GRANT ALL ON postgis.geometry_columns TO PUBLIC;
GRANT ALL ON postgis.spatial_ref_sys TO PUBLIC
于 2012-09-28T19:45:59.703 に答える
10

これが私が問題を解決した方法です。私は最初にpostgisをデータベースに追加するための新しい移行を作成しました。(私はすでにMacにhomebrewを介してpostgisとpostgresqlの両方をインストールしています。)

rails g migration add_postgis_to_database

移行ファイルで、changeメソッドを削除し、executeメソッドを使用してPOSTGISを追加しました。

execute("CREATE EXTENSION postgis;")

その後、データベースをチェックして、postgisが利用可能であることを確認できます。

psql your_database_name
SELECT PostGIS_full_version();
于 2013-04-15T00:49:03.873 に答える
3

実際には、installコマンドはpostgisバージョンを呼び出す必要があります

sudo apt-get install -y postgis postgresql-9.3-postgis-2.1

前進する最も簡単な方法は、宣言することです

sudo -u postgres psql -c "CREATE EXTENSION postgis" your-pg-database-name

移行の問題を回避します。

于 2014-11-15T09:04:09.757 に答える
2

使用しているPostgreSQLのバージョンは何ですか?9.1に登場しEXTENSIONもの。拡張機能は、1つのパッケージに複数のオブジェクトをロードするための便利な方法です。

9.1未満を使用している場合は、これらの手順(すべての-fコマンド)に従ってPostGISをロードできる可能性があります。アップグレードするのも良い考えかもしれませんが、それはあなた次第です。

于 2012-08-31T01:41:41.143 に答える
1

@Raidoのソリューションでdb:migrateの問題が修正されたが、テナントが作成されたとき(db:seedなど)にApartment gemで問題が発生したことを除いて、同じ問題が発生しました。

Railsが自動的enable_extension "postgis"にschema.rbに追加していることを発見しました。これは、Apartmentがテナントスキーマの作成に使用します。Apartmentが既存のpostgis拡張機能を使用しない理由(おそらくテナント作成時のsearch_pathの問題)は正確にはわかりませんが、これにより同じエラーが発生します。

解決策(それを呼び出すことができる場合)はenable_extension "postgis"、schema.rbから行を削除することでした。このアプローチの唯一の問題は、schema.rbの更新をトリガーする後続の移行により、行が再追加されることです。

また、postgis拡張機能を独自のスキーマではなくshared_extensionsスキーマに追加するApartmentアプローチを使用しました。私のlib/tasks/db_extensions.rakeは次のようになります。

namespace :db do
  desc 'Also create shared_extensions Schema'
  task :extensions => :environment  do
    # Create Schema
    ActiveRecord::Base.connection.execute 'CREATE SCHEMA IF NOT EXISTS shared_extensions;'
    # Enable Hstore
    ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS HSTORE SCHEMA shared_extensions;'
    # Enable uuid-ossp for uuid_generate_v1mc()
    ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA shared_extensions;'
    # Enable postgis extension for geographic data types
    ActiveRecord::Base.connection.execute 'DROP EXTENSION IF EXISTS postgis;'
    ActiveRecord::Base.connection.execute 'CREATE EXTENSION postgis WITH SCHEMA shared_extensions;'
    ActiveRecord::Base.connection.execute 'GRANT USAGE ON SCHEMA shared_extensions to PUBLIC;'
    puts 'Created extensions'
  end
end

Rake::Task["db:create"].enhance do
  Rake::Task["db:extensions"].invoke
end

Rake::Task["db:test:purge"].enhance do
  Rake::Task["db:extensions"].invoke
end

そして私のdatabase.ymlは次のようになります:

postgis_options: &postgis_options
  adapter: postgis
  postgis_extension: postgis # default is postgis
  postgis_schema: shared_extensions # default is public

default: &default
  schema_search_path: 'public,shared_extensions'
  encoding: utf8
  <<: *postgis_options

...

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'].try(:sub, /^postgres/, 'postgis') %>

理想的ではありませんが、機能しています。おそらくこれはPostGISとApartmentで誰かを1時間か2時間節約するでしょう。enable_extensionschema.rbから呼び出しを削除するよりも良い解決策があるかどうか知りたいです:)

于 2017-06-25T21:11:43.240 に答える
0

これをインストールしたことを確認してください

sudo apt-get install postgresql-9.3-postgis

このパッケージがないため、同じ問題に直面していました。

于 2014-09-24T12:32:05.273 に答える