Postgisのインストール:タイプ「geometry」は存在しません


95

Postgisでテーブルを作成しようとしています。このページでやってます。しかし、postgis.sqlファイルをインポートすると、多くのエラーが発生します。

ERROR:  type "geometry" does not exist

誰かがそれをどのように修正できるか知っていますか?

回答:


199

同じ問題がありましたが、次のコードを実行することで修正されました

CREATE EXTENSION postgis;

詳細に、

  1. pgAdminを開く
  2. データベースを選択(クリック)
  3. バーの「SQL」アイコンをクリックします
  4. 「CREATE EXTENSION postgis;」を実行します。コード

3
ありがとう。ところで、誰かが「psql」を使用してこのコードを実行している場合は、そのロールに「スーパーユーザー」属性/特権があることを確認してください。
ヤン

2
ライフセーバー!私はすでにこれをセットアップしていると思ったので、それが何か別のものだとずっと考えていました...
James111

2
これは、使用している特定のデータベースに固有のものであることに注意してください。インストール全体ではありません。
fooquency

1
私はpg_dumpを元に戻し、同じ問題を抱えていました。私のpostgis拡張機能は、そのデータをと呼ばれるカスタムスキームに入れpostgisます。私は次のコマンドを実行する必要があり、すべてが順調でした:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman

23

Postgis-Extensionがロードされている場合、パブリックスキーマへのsearch-pathが欠落しているため、SQLがジオメトリタイプを見つけられない可能性があります。

試す

SET search_path = ...、パブリック;

scsriptの最初の行。(...を他の必要な検索パスに置き換えます)



18

最初のエラーでpsqlを停止させるには、-v ON_ERROR_STOP=1デフォルトではオフになっているため、多くのエラーが表示されるのはこのためです)。例えば:

psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql

実際のエラーは「ライブラリXをロードできませんでした」のようなもので、状況によって異なります。推測として、SQLスクリプトをインストールする前に次のコマンドを試してください。

ldconfig

sudoシステムによっては、接頭辞を付ける必要がある場合があります)。このコマンドは、GEOSなどのすべてのシステムライブラリへのパスを更新します。



5

このエラーは、以外のスキーマでpostgisタイプを使用しようとした場合にも発生する可能性がありますpublic

独自のスキーマを作成し、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の機能を使用します。


3

また、postgis拡張機能を使用しようとしているユーザーが、postgisが設定されているスキーマ(私が読むチュートリアルでは「postgis」と呼ばれています)にアクセスできることを確認する必要もあります。

このエラーが発生しました。新しいユーザーにデータベースへのアクセス権を与えただけだったため、問題は解決しました。作成したデータベースで、次のコマンドを実行しました。

grant all on schema postgis to USERNAME; 

そして、これはこのエラーを解決しました


1

ここでの回答で問題が解決する可能性がありますが、DBで既にpostgisが有効になっている場合は、postgis拡張機能が有効になっている場所以外のスキーマにpostgesテーブル(geometry列を含む)を復元しようとしていることが問題である可能性があります。pgAdminでは、postgis拡張機能をクリックして、指定されているスキーマを確認できます。ジオメトリ列を含むテーブルを別のスキーマに復元しようとすると、このエラーが発生する可能性があります。

私は自分のpostgis拡張機能を変更することでこれを解決しました-しかし、それが必ずしもそれを行うための最良の方法であったかどうかはわかりません。私が知っているのは、それによってテーブルを復元できるということだけです。


PostGISのバージョン2.3まであなたは私のために数回、この問題を解決し、別のスキーマに拡張を移動することができます
ダニエル・チューリップ

0

または...

cursor.execute('create extension postgis')

pythonプログラムで、psycopg2の現在のカーソルを使用します。


0

まず、(pgバージョンに一致する:psql -V)postgisがインストールされていることを確認します。

sudo apt install postgis postgresql-9.6-postgis-2.3

テーブル作成の直前に以下を追加します:

db.engine.execute('create extension postgis') 
db.create_all()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.