PostgreSQL'de “public” dışında bir özel şemaya PostGIS uzamsal işlevleri ekleme


15

Son zamanlarda pgAdmin kullanarak bir PostgreSQL 9.1 veritabanı sunucusunda PostGIS 2.0.3 veritabanı oluşturdum. "PostGIS" uzantısı "Uzantılar" da yüklü bulundu. "Kamusal" şemaya tüm mekansal fonksiyonlar eklendi. Bu iyi.

Şimdi tüm verilerimi "gc" adında yeni bir şemada saklamak istiyorum. Ancak, bu "gc" şemasında yüklü olan tüm uzamsal işlevleri nasıl yapabilirim? Şemada tek bir işlev yoktur. Ancak, ESRI ArcCatalog 10.1'den bu şemaya bir özellik sınıfı içe / yeni aktarmaya çalıştığımda işe yaradı! Özellik sınıfı içe aktarılabilir ve QGIS'de görüntülenebilir.

Birisi bana herhangi bir ipucu veya fikir verebilir mi?

PostgreSQL ve PostGIS için yeniyim.



@MartinF Bağlandığınız soruda bu soruya (eksik) bir cevap var , ancak bu soru gerçekten çok farklı bir şey soruyor.
Kenny Evitt

Bu soru "PostGIS'i herkese açık olmayan bir şemaya yüklensin mi?"
Kenny Evitt

Yanıtlar:


3

PostGIS uzantısını bir gcşemaya yüklemek için örnek komutlar :

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

PostGIS ve nesnelerini, önceden yüklemiş olmanız durumunda PostGIS 2.4.4 sürümü için yeni bir şemaya taşımak için örnek komutlar :

CREATE SCHEMA gc;

UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';

ALTER EXTENSION postgis
SET SCHEMA gc;

ALTER EXTENSION postgis
UPDATE TO "2.4.4next";

ALTER EXTENSION postgis
UPDATE TO "2.4.4";

Bu kesinlikle gerekli değildir; sadece yardımcı:

ALTER DATABASE whatever
SET search_path = public,gc;

1

Kenny Evitt zaten en önemli şeyleri açıkladı. Yine de, bazı ek bilgiler:

Postgresql'nin veritabanları, tablo alanları ve şemaları vardır ve bir veritabanından diğerine birleştirmeler yapmak imkansızdır, çünkü bunlar kesinlikle ayrılmıştır. Bir veritabanında birden fazla şema olabilir ve bir şemadan diğerine bir şey katılabilir. Daha fazla bilgi için dokümanlara bakın:

Post şeminizi gc şemanıza yüklemek için başka bir olasılık da şudur:

t=# create schema gc;
CREATE SCHEMA
t=# set search_path to gc;
SET
t=# create extension postgis;
CREATE EXTENSION

Ne Arc Catalog'da ne de pgadmin'de uzman değilim, ancak aşağıdaki üç olasılıktan birinin gerçekleştiğini varsayıyorum:

  1. Postgresql geometrik veri tiplerini doğal olarak destekler . Ancak Geo Contexts'te buna güvenmemelisiniz, çünkü CRS meta verileri ve dönüşüm işlevselliği verilmez. Sadece şanslısın ve hiçbir şey kırılmadı.
  2. Arc Catalogue, bir şekilde bir PostGIS uzantısı bulamadıktan sonra, kullanıcıyı bilgilendirmeden oluşturdu. Bunu kontrol etmek için, bu adımdan önce ve sonra mevcut tablolara bakabilirsiniz.

Psql'de, şunu yazarak yapabilirsiniz:

\d
           List of Relations
 Schema |       Name        |   Type  | Owner 
--------+-------------------+---------+----------
 gc     | geography_columns | View    | postgres
 gc     | geometry_columns  | View    | postgres
 gc     | raster_columns    | View    | postgres
 gc     | raster_overviews  | View    | postgres
 gc     | spatial_ref_sys   | Table   | postgres

Bunu görürseniz, PostGIS bir uzantı olarak kurulmuştur. Üçüncü olasılık ArcCatalog'un böyle bir şey yapmasıdır:

set search_path to $all_schemas;
import to gc;

Bu durumda da şanslısınız. Ama belki, ArcCatalog sonunda daha sofistike bir şey yapar ...


0

işte çözümünüz:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

PostGIS uzantısını genel şemanıza zaten yüklediyseniz ve gc'ye taşımak istiyorsanız, aşağıdaki kodu yazın:

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA gc;
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.