Postgisでテーブルを作成しようとしています。これで page でやる。しかし、postgis.sqlファイルをインポートすると、多くのエラーが発生します。
ERROR: type "geometry" does not exist
誰がどのように修正できるか知っていますか?
私は同じ問題を抱えていましたが、次のコードを実行することで修正されました
CREATE EXTENSION postgis;
詳細に、
最初のエラーでpsqlを停止するには、-v ON_ERROR_STOP=1
を使用します(これは デフォルトではオフ です。これが多くのエラーを表示する理由です)。例えば:
psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql
実際のエラーは「ライブラリXをロードできませんでした」のようなもので、状況によって異なります。推測として、SQLスクリプトをインストールする前に次のコマンドを試してください。
ldconfig
(システムによっては、Sudo
を前に付ける必要がある場合があります)。このコマンドは、GEOSなどのすべてのシステムライブラリへのパスを更新します。
Postgis-Extensionがロードされている場合、パブリックスキーマへの検索パスが欠落しているため、SQLでジオメトリタイプが見つからない可能性があります。
試して
SET search_path = ...、public;
scsriptの最初の行に。 (...を他の必要な検索パスに置き換えます)
端末から実行できます:
psql mydatabasename -c "CREATE EXTENSION postgis";
データベースで拡張機能を有効にする必要があります。
psql my_database -c "CREATE EXTENSION postgis;"
また、postgis拡張機能を使用しようとしているユーザーが、postgisがセットアップされているスキーマ(私が読んだチュートリアルでは「postgis」と呼ばれる)にアクセスできることを確認する必要があります。
このエラーが発生しましたが、新しいユーザーにデータベースへのアクセス権を与えただけだったので解決しました。作成したデータベースで、次を実行しました。
grant all on schema postgis to USERNAME;
そして、これはこのエラーを解決しました
ここでの答えはあなたの問題を解決するかもしれませんが、DBで既にpostgisが有効になっている場合、postgis拡張が有効になっている場所以外のスキーマに(geometry列を持つ)postgisテーブルを復元しようとしている可能性があります。 pgAdminでは、postgis拡張機能をクリックして、指定されたスキーマを確認できます。ジオメトリ列を持つテーブルを別のスキーマに復元しようとすると、このエラーが発生する場合があります。
私はpostgis拡張を変更することでこれを解決しました-しかし、それが必ずしもそれを行うための最良の方法であるかどうかはわかりません。私が知っているのは、テーブルを復元できることだけです。
または...
cursor.execute('create extension postgis')
pythonプログラムで、psycopg2の現在のカーソルを使用します。
このエラーは、public
ではなく別のスキーマでpostgisタイプを使用しようとした場合にも発生する可能性があります。
Postgis 2.3以降を使用して独自のスキーマを作成しているときにこのエラーが発生した場合は、次のようにします ここで述べたとおり :
CREATE SCHEMA IF NOT EXISTS my_schema;
CREATE extension postgis;
UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';
ALTER EXTENSION postgis
SET SCHEMA my_schema;
ALTER EXTENSION postgis
UPDATE TO "2.5.2next";
ALTER EXTENSION postgis
UPDATE TO "2.5.2";
SET search_path TO my_schema;
その後、postgis機能を使用して続行できます。
最初に、(pgバージョンに一致する:psql -V)postgisがインストールされていることを確認してください:
Sudo apt install postgis postgresql-9.6-postgis-2.3
テーブルを作成する直前に以下を追加します。
db.engine.execute('create extension postgis')
db.create_all()