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:
Aynı sorunu yaşadım, ancak aşağıdaki kodu çalıştırarak düzeltildi
CREATE EXTENSION postgis;
Detayda,
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; $$ ;
Bunu terminalden yapabilirsiniz:
psql mydatabasename -c "CREATE EXTENSION postgis";
İ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
( sudo
sisteminize bağlı olarak önek eklemeniz gerekebilir ). Bu komut, GEOS gibi tüm sistem kitaplıklarının yollarını günceller.
Ü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.
Uzantıyı veritabanınızda etkinleştirmelisiniz.
psql my_database -c "CREATE EXTENSION postgis;"
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ü
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.