Postgis kurulumu: "geometri" türü mevcut değil


97

Postgis ile tablo oluşturmaya çalışıyorum. Bunu bu sayfadan yapıyorum . Ancak postgis.sql dosyasını içe aktardığımda birçok hata alıyorum:

ERROR:  type "geometry" does not exist

Bunu nasıl düzeltebileceğimi bilen var mı?

Yanıtlar:


210

Aynı sorunu yaşadım, ancak aşağıdaki kodu çalıştırarak düzeltildi

CREATE EXTENSION postgis;

Detayda,

  1. pgAdmin'i aç
  2. veritabanınızı seçin (tıklayın)
  3. çubuktaki "SQL" simgesine tıklayın
  4. "CREATE EXTENSION postgis" komutunu çalıştırın; kodu

3
Teşekkürler. BTW, Birisi bu kodu çalıştırmak için 'psql' kullanıyorsa, rolün 'Süper kullanıcı' özniteliğine / ayrıcalığına sahip olduğundan emin olun.
Yang

2
YAŞAM KURTARICI! Bunu zaten
kurduğumu

2
Bunun kullandığınız belirli bir veritabanına özgü olduğunu unutmayın. Kurulum çapında değildir.
fooquency

1
Bir pg_dump geri koydum ve aynı sorunu yaşadım. Postgis uzantım, verilerini postgis. Aşağıdaki komutu çalıştırmam gerekiyordu ve her şey tekrar DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
yolundaydı

23

Postgis Uzantısı yüklenirse, SQL'iniz belki de genel şemaya giden arama yolunun eksik olması nedeniyle geometri türünü bulamaz.

Deneyin

SET search_path = ..., genel;

senaryonuzun ilk satırında. (... diğer gerekli arama yollarıyla değiştirin)


23

Bunu terminalden yapabilirsiniz:

psql mydatabasename -c "CREATE EXTENSION postgis";

18

İlk hatada psql'nin durmasını sağlamak için kullanın -v ON_ERROR_STOP=1( varsayılan olarak kapalıdır , bu nedenle birçok hata görürsünüz). Örneğin:

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

Gerçek hata, durumunuza göre değişebilen "kitaplık X yüklenemedi" gibi bir şeydir. Tahmin olarak, sql betiğini kurmadan önce bu komutu deneyin:

ldconfig

( sudosisteminize bağlı olarak önek eklemeniz gerekebilir ). Bu komut, GEOS gibi tüm sistem kitaplıklarının yollarını günceller.


6

Üzerinde PostGIS türlerini kullanmaya çalıştığınızda bu hata da oluşabilir başka bir şema yerinepublic .

Postgis 2.3 veya üstünü kullanarak kendi şemanızı oluşturuyorsanız ve bu hatayla karşılaşırsanız, burada belirtildiği gibi aşağıdakileri yapın :

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;

Daha sonra postgis işlevlerini kullanmaya devam edebilirsiniz.


5

Uzantıyı veritabanınızda etkinleştirmelisiniz.

psql my_database -c "CREATE EXTENSION postgis;"


3

Ayrıca postgis uzantısını kullanmaya çalıştığınız kullanıcının postgis'in kurulduğu şemaya erişimi olduğundan emin olmalısınız (okuduğum eğitimlerde 'postgis' olarak adlandırılır).

Bu hatayı yeni aldım ve çözüldü çünkü veritabanına yalnızca yeni bir kullanıcı erişimi vermiştim. Oluşturduğum veritabanında şunu çalıştırdım:

grant all on schema postgis to USERNAME; 

Ve bu, bu hatayı çözdü


1

Buradaki cevaplar sorununuzu çözebilir, ancak DB'nizde postgis'i zaten etkinleştirdiyseniz, sorun bir postgis tablosunu (bir geometri sütunuyla) postgis uzantınızın etkinleştirildiği yer dışındaki bir şemaya geri yüklemeye çalışıyor olabilirsiniz. PgAdmin'de postgis uzantısına tıklayabilir ve hangi şemanın belirtildiğini görebilirsiniz. Geometri sütununa sahip bir tabloyu farklı bir şemaya geri yüklemeye çalışıyorsanız, bu hatayı alabilirsiniz.

Bunu postgis uzantımı değiştirerek çözdüm - ancak bunun mutlaka yapmanın en iyi yolu olup olmadığından emin değilim. Tek bildiğim, masayı eski haline getirmeme izin verdiği.


Postgis sürüm 2.3'e kadar, uzantıyı, bu sorunu benim için birkaç kez çözen başka bir şemaya taşıyabilirsiniz
Daniël Tulp

0

Veya...

cursor.execute('create extension postgis')

python programınızda, psycopg2'den geçerli bir imleci kullanarak.


0

Öncelikle (pg sürümüne uygun: psql -V) postgis'in kurulu olduğundan emin olun:

sudo apt install postgis postgresql-9.6-postgis-2.3

Tablo oluşturmadan hemen önce şunu ekleyin:

db.engine.execute('create extension postgis') 
db.create_all()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.