PostGIS'te herkese açık olmayan şema mı kullanıyorsunuz?


21

Şu anda Ubuntu üzerinde yeni bir PostGIS 2.0.2 ve PostgreSQL 9.1.6 kurulumu yapıyorum. Son zamanlarda tüm verileri saklamak için genel şema kullanmanın iyi bir fikir olmadığını belirten bazı bilgilerle karşılaştım .

Bu nedenle veri adı verilen bir şema oluşturdum ve kendimi sahip yaptım, ama bu iyi bir fikir mi?

Endişelerim:

  1. Sahibini ayarlamanın yanı sıra, bu yeni şemayı oluştururken (pgAdmin III aracılığıyla) Ayrıcalıklar sekmesindeki şeylere dikkat etmem gerekebilir;
  2. Verilerimi genel şemada depolayarak ve bir yedekleme / geri yükleme yapmadan önce tüm verileri ayrı bir şemaya dökerek aynı faydaları elde edemeyebilirim (bu, ogr2ogr kullanırken birkaç tuş vuruşunu kaydeder); ve
  3. Yeni veri şememde varsayılan PostGIS tabloları ve görünümleri (aynı veritabanı içinde ortak şemada olan) olmadan sorun yaşayabilirsiniz.

1
Yeni yanıtı buradan kontrol edin gis.stackexchange.com/a/270522/6052
Evan Carroll

3
Evet, hala geçerli. Kullanıcı verilerini sistem verilerinden ve işlevlerden ayırdığınızda ana nokta daha temiz olmasıdır.
John Powell

Ben bir PostGIS kullanıcısı değilim ama sorunuza en iyi cevabın şimdi gis.stackexchange.com/a/270522/115 olabileceğinden şüpheleniyorum .
PolyGeo

1
Bu soru iki soru olmalıdır. Kabul edilen cevap soruyu yazılı olarak cevaplamaz. Bu soru , PostGIS nesnelerinin kendilerinin şemada olmayan nesnelerle çalışıp çalışamayacağını soran bu sorunun bir kopyası DEĞİL olduğundan yeniden açılmalıdır public. Bu diğer soru PostGIS uzantı nesnelerini başka bir şemaya kurmakla ilgilidir public. Bunlar iki farklı şey!
Kenny Evitt

Yanıtlar:


7

Bu, resmi sitede, PostGIS uzantısını farklı bir şemaya taşı başlıklı bir sayfada ele alınmıştır . Doğru yöntem, uzantıyı içine yüklemek public. Bu tek seçenektir. Uzantı artık yer değiştirmeyi desteklemiyor. Bir sonraki şey aşağıdaki komutları çalıştırmaktır (siteden kopyalanır),

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
Bu mu DEĞİL yazılı olarak soruya cevap; o olmalıdır DEĞİL kabul cevap. Bu edilir açıkça soran "benim yeni varsayılan PostGIS tablolar ve görünümler olmaması dataşema (bunlar içindedir publicaynı veritabanı içinde şema)". Bu cevap faydalıdır ve aradığım şey budur, ancak doğrudan soru ile ilgili değildir .
Kenny Evitt

20

Bir PostGIS veritabanını uzamsal olarak etkinleştirdiğinizde, ilgili işlevler, SRS tablosu ve görünümler, belirttiğiniz gibi genel şemaya yerleştirilir. Bu, kendi uzamsal tablolarınızın hepsinin veya herhangi birinin aynı genel şemada olması gerektiği anlamına gelmez. PostGIS, "yeni" şemalardaki tüm uzamsal veriler üzerinde çalışmaya devam edecektir.

Aslında, uygulamaya özgü tablolarımı ayrı bir şemaya yerleştiriyorum. Bu şekilde, PostGIS için büyük bir sürüm yükseltmesi yapmanız gerekiyorsa, uygulamaya özgü tablo yedeklemelerinizi ve geri yüklemelerinizi, uzamsal araçların yerini alandan ayrı bir yordam olarak saklayabilirsiniz.

Sanırım iyi gidiyorsun. Son olarak, zaten yapmadıysanız, yeni şemayı arama yoluna eklemek iyi bir fikirdir:

ALTER DATABASE my_db SET search_path = gc, public;


Teşekkürler Martin. Bu, "genel" dışında bir özel şemadaki tablolarda uzamsal işlevleri kullanabileceğim anlamına mı geliyor?
alextc

Başka bir şemaya nasıl veri eklersiniz? değil publicmi? Örneğin ile veri ekleme. hala veri shp2psqlkoymak için ? test.tablepublic
knutole

@knutole. Bahsettiğim gibi ArcCatalog'u yeni özellik sınıflarını içe aktarmak için kullandım. Genel dışında özel bir şemaya veri eklemek için shp2psql kullanıp kullanamayacağınızdan emin değilim.
alextc

1
Bu kabul edilen cevap olmalı.
Kenny Evitt

12
  1. Şemalarla oluşturabileceğiniz olası organizasyonel stratejilerden biri, kullanıcının bir şemada yaygın çalışmasına izin vermek, ancak başka bir şemada faul yapamamaktır. Şemaları bu şekilde kullanmak istiyorsanız, pgAdmin'in ayrıcalıklar sekmesinde yapılabilir. Ancak bunu yapmanız gerekmez, bu nedenle birden fazla şemada aynı ayrıcalıkları korumak istiyorsanız, sorun değil.

  2. Bağlantı verdiğiniz makalelere dayanarak, her şeyi herkese açık tutmayla ilgili sorun, verileri döktüğünüzde, sistem tablolarını ve ilişkilerinizi verilerinizle karıştırmanızdır. Tüm verilerinizi yeni bir şemaya taşırsanız, bunun için bir daha endişelenmenize gerek yoktur.

  3. Hiç sorun değil. (Kanıt olarak, SRS tablosunu aramak istediğinizde public.spatial_ref_sys belirtmeniz gerekmediğini unutmayın.)


6

Bir ipucu daha (belki de bununla zaten karşılaştınız). Muhtemelen "veri" şemasını kullanıcının varsayılan arama_yoluna eklemek istersiniz. Gibi bir şey:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

2. noktanıza gelince, bazen orijinal DB'ye erişiminiz olmadığında geri yüklemeniz gerekebilir. (Bu, yedeklemelerin nedenlerinden biridir ...) Bu nedenle, verilerinizi gerçekten ihtiyaç duyduğunuzda ayrı bir şemaya taşıma şansınız olmayabilir.


1

Geçici şema / dev tablo sonuçları için genel şemayı kullanırız, daha sonra kalıcı kullanım için daha organize şemalara (klasörler?) Gideriz.

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.