Pemasangan postgis: jenis "geometri" tidak ada

95

Saya mencoba membuat tabel dengan Postgis. Saya melakukannya dengan halaman ini . Tetapi ketika saya mengimpor file postgis.sql, saya mendapatkan banyak kesalahan:

ERROR:  type "geometry" does not exist

Adakah yang tahu bagaimana cara memperbaikinya?

yetty
sumber

Jawaban:

201

Saya memiliki masalah yang sama, tetapi diperbaiki dengan menjalankan kode berikut

CREATE EXTENSION postgis;

Secara terperinci,

  1. buka pgAdmin
  2. pilih (klik) database Anda
  3. klik ikon "SQL" di bilah
  4. jalankan "BUAT EKSTENSI postgis;" kode
Krishna Sapkota
sumber
3
Terima kasih. BTW, Jika seseorang menggunakan 'psql' untuk menjalankan kode ini, pastikan peran tersebut memiliki atribut / hak istimewa 'Pengguna Super'.
Yang
2
PENOLONG! Saya pikir saya sudah mengatur ini jadi saya terus berpikir itu adalah sesuatu yang lain ...
James111
2
Perhatikan bahwa ini khusus untuk database tertentu yang Anda gunakan. Ini tidak untuk seluruh instalasi.
fooquency
1
Saya mengembalikan pg_dump, dan memiliki masalah yang sama. Ekstensi postgis saya menempatkan datanya ke dalam SKEMA kustom, yang disebut postgis. Saya perlu menjalankan perintah berikut, dan semuanya baik-baik saja:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman
23

Jika Postgis-Extension dimuat, SQL Anda mungkin tidak menemukan jenis geometri karena jalur pencarian ke skema publik tidak ada.

Mencoba

SET search_path = ..., publik;

di baris pertama scsript Anda. (ganti ... dengan jalur pencarian lain yang diperlukan)

Ludwig
sumber
22

Anda dapat melakukannya dari terminal:

psql mydatabasename -c "CREATE EXTENSION postgis";
Brendan Nee
sumber
18

Agar psql berhenti pada kesalahan pertama, gunakan -v ON_ERROR_STOP=1(yang dinonaktifkan secara default , itulah sebabnya Anda melihat banyak kesalahan). Sebagai contoh:

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

Kesalahan sebenarnya adalah sesuatu seperti "tidak dapat memuat pustaka X", yang dapat bervariasi pada situasi Anda. Sebagai tebakan, coba perintah ini sebelum menginstal skrip sql:

ldconfig

(Anda mungkin perlu mengawali dengan sudobergantung pada sistem Anda). Perintah ini memperbarui jalur ke semua pustaka sistem, seperti GEOS.

Mike T
sumber
5

Anda harus mengaktifkan ekstensi pada database Anda.

psql my_database -c "CREATE EXTENSION postgis;"

Baptiste Donaux
sumber
5

Kesalahan ini juga dapat terjadi jika Anda mencoba menggunakan tipe postgis pada skema lain daripada public.

Jika Anda membuat skema Anda sendiri, menggunakan postgis 2.3 atau lebih tinggi dan mengalami kesalahan ini, lakukan hal berikut seperti yang dinyatakan di sini :

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;

Kemudian Anda dapat melanjutkan untuk menggunakan fungsi postgis.

Leonardo Kuffo
sumber
3

Anda juga perlu memastikan bahwa pengguna yang Anda coba gunakan ekstensi postgis, memiliki akses ke skema tempat postgis disiapkan (yang dalam tutorial yang saya baca disebut 'postgis').

Saya baru saja mengalami kesalahan ini, dan itu diselesaikan karena saya hanya memberikan akses pengguna baru ke database. Dalam database yang saya buat, saya menjalankan:

grant all on schema postgis to USERNAME; 

Dan ini memecahkan kesalahan ini

mozboz.dll
sumber
1

Jawaban di sini mungkin menyelesaikan masalah Anda, namun jika Anda sudah mengaktifkan postgis di DB Anda, masalahnya mungkin Anda mencoba memulihkan tabel postgis (dengan kolom geometri) ke dalam skema selain di mana ekstensi postgis Anda diaktifkan. Di pgAdmin Anda dapat mengklik ekstensi postgis dan melihat skema mana yang ditentukan. Jika Anda mencoba memulihkan tabel dengan kolom geometri ke skema yang berbeda, Anda mungkin mendapatkan kesalahan ini.

Saya menyelesaikan ini dengan mengubah ekstensi postgis saya - namun saya tidak yakin apakah itu cara terbaik untuk melakukannya. Yang saya tahu adalah bahwa itu memungkinkan saya untuk memulihkan tabel.

jase81
sumber
hingga Postgis versi 2.3 Anda dapat memindahkan ekstensi ke skema lain yang beberapa kali memecahkan masalah ini untuk saya
Daniël Tulp
0

Atau...

cursor.execute('create extension postgis')

dalam program python Anda, menggunakan kursor saat ini dari psycopg2.

softweyr.dll
sumber
0

Pertama, pastikan Anda memiliki (cocok dengan versi pg: psql -V) postgis diinstal:

sudo apt install postgis postgresql-9.6-postgis-2.3

Tepat sebelum pembuatan tabel tambahkan:

db.engine.execute('create extension postgis') 
db.create_all()
Karolius
sumber