Menggunakan skema selain publik di PostGIS?

21

Saat ini saya sedang menyiapkan instalasi baru PostGIS 2.0.2 dan PostgreSQL 9.1.6 di Ubuntu. Baru-baru ini saya menemukan beberapa informasi yang menunjukkan bahwa menggunakan skema publik untuk menyimpan semua data bukanlah ide yang baik.

Untuk alasan ini, saya telah menyiapkan skema yang disebut data dan menjadikan saya pemiliknya, tetapi apakah itu ide yang bagus?

Kekhawatiran saya adalah:

  1. Selain mengatur pemilik, saya mungkin perlu memperhatikan hal-hal pada tab Privileges saat membuat skema baru ini (melalui pgAdmin III);
  2. Saya mungkin tidak mendapatkan manfaat yang sama dengan menyimpan data saya di skema publik dan membuang semua data ke skema terpisah sebelum melakukan backup / restore (ini akan menghemat beberapa penekanan tombol saat menggunakan ogr2ogr); dan
  3. Saya mungkin mengalami masalah dengan tidak memiliki tabel dan tampilan PostGIS default dalam skema data baru saya (mereka berada dalam skema publik dalam database yang sama).
Paul
sumber
1
Lihat jawaban baru di sini gis.stackexchange.com/a/270522/6052
Evan Carroll
3
Ya, itu masih berlaku. Poin utama adalah lebih bersih, karena Anda memisahkan data pengguna dari data sistem dan fungsi.
John Powell
Saya bukan pengguna PostGIS tetapi saya menduga bahwa jawaban terbaik untuk pertanyaan Anda sekarang adalah gis.stackexchange.com/a/270522/115 jadi jika Anda setuju saya akan mendorong Anda untuk memindahkan tanda centang Terima Anda ke sana.
PolyGeo
1
Pertanyaan ini harusnya dua pertanyaan. Jawaban yang diterima tidak menjawab pertanyaan seperti yang tertulis. Pertanyaan ini harus dibuka kembali karena BUKAN duplikat dari pertanyaan ini, yang menanyakan apakah objek PostGIS dapat bekerja sendiri dengan objek yang tidak ada dalam publicskema. Pertanyaan lain itu adalah tentang menginstal objek ekstensi PostGIS ke dalam skema selain public. Ini adalah dua hal yang berbeda!
Kenny Evitt

Jawaban:

7

Ini sekarang ditujukan pada situs resmi di halaman berjudul Pindahkan ekstensi PostGIS ke skema lain . Metode yang benar adalah menginstal ekstensi public. Ini satu-satunya pilihan. Ekstensi tidak lagi mendukung relokasi. Hal berikutnya adalah menjalankan perintah berikut, (disalin dari situs),

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;
Evan Carroll
sumber
2
Ini TIDAK menjawab pertanyaan seperti yang tertulis; seharusnya TIDAK menjadi jawaban yang diterima. Ini jelas bertanya tentang "tidak memiliki tabel dan tampilan PostGIS default dalam dataskema baru saya (mereka ada dalam publicskema dalam database yang sama)". Jawaban ini bermanfaat, dan itulah yang saya cari, tetapi tidak terkait langsung dengan pertanyaan.
Kenny Evitt
20

Ketika Anda secara spasial mengaktifkan database PostGIS, fungsi yang relevan, tabel SRS, dan tampilan ditempatkan dalam skema publik, seperti yang Anda nyatakan. Itu tidak berarti bahwa semua atau semua tabel spasial Anda harus dalam skema publik yang sama. PostGIS masih akan bekerja pada semua data spasial dalam skema "baru".

Bahkan, saya biasanya menempatkan tabel khusus aplikasi saya dalam skema terpisah. Dengan begitu, jika Anda perlu melakukan peningkatan versi utama ke PostGIS, Anda dapat menyimpan cadangan tabel khusus aplikasi dan memulihkannya sebagai prosedur terpisah dari prosedur yang menggantikan alat spasial.

Jadi, saya pikir Anda baik-baik saja. Terakhir, jika Anda belum melakukannya, sebaiknya tambahkan skema baru ke jalur pencarian:

ALTER DATABASE my_db SET search_path = gc, public;

Martin F
sumber
Terima kasih Martin. Apakah itu berarti saya dapat menggunakan fungsi spasial pada tabel dalam skema khusus selain "publik"?
alextc
Bagaimana Anda menambahkan data ke skema lain, yaitu. bukan public? Menambahkan data dengan mis. shp2psqluntuk test.tabletetap memasukkan data public?
knutole
@knutole. Seperti yang saya sebutkan saya menggunakan ArcCatalog untuk mengimpor / kelas fitur baru. Saya tidak yakin apakah Anda dapat menggunakan shp2psql untuk menambahkan data ke skema khusus selain publik.
alextc
1
Ini harus menjadi jawaban yang diterima.
Kenny Evitt
12
  1. Salah satu strategi organisasi yang dapat Anda bangun dengan skema adalah untuk memungkinkan pengguna untuk merajalela dalam satu skema, tetapi tidak dapat merusak hal-hal lain. Jadi, jika Anda ingin menggunakan skema dengan cara ini, itu bisa dilakukan di tab privilege pgAdmin. Tapi itu tidak mengharuskan Anda melakukan itu, jadi jika Anda hanya ingin mempertahankan hak yang sama di beberapa skema, itu bagus.

  2. Berdasarkan artikel yang Anda tautkan, masalah dengan menjaga segala sesuatu di depan umum adalah ketika Anda membuang data, Anda cenderung mendapatkan tabel sistem dan hubungan yang dicampur dengan data Anda. Jika Anda memindahkan semua data Anda ke skema baru, Anda tidak perlu khawatir tentang itu lagi.

  3. Tidak ada masalah sama sekali. (Sebagai bukti, perhatikan bahwa Anda tidak harus menentukan public.spatial_ref_sys saat Anda ingin mencari tabel SRS.)

L_Holcombe
sumber
6

Satu tip tambahan (mungkin Anda sudah menemukan ini). Anda mungkin ingin menambahkan skema "data" ke search_path default pengguna. Sesuatu seperti:

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

Mengenai poin 2 Anda, kadang-kadang Anda perlu memulihkan ketika Anda tidak lagi memiliki akses ke DB asli. (Itulah salah satu alasan cadangan ...) sehingga Anda mungkin tidak memiliki kesempatan untuk memindahkan data ke skema terpisah saat Anda benar-benar membutuhkannya.

Micha
sumber
1

Kami menggunakan skema publik untuk hasil analisis sementara / tabel dev, lalu masuk ke skema (folder?) Yang lebih terorganisir untuk penggunaan permanen.

DPSSpatial
sumber