PostGISでパブリック以外のスキーマを使用していますか?


21

現在、UbuntuにPostGIS 2.0.2およびPostgreSQL 9.1.6の新規インストールをセットアップしています。私は最近に遭遇してきたいくつかの 情報のすべてのデータを保存するために公共のスキーマを使用することは良い考えではないことを示しています。

このため、データと呼ばれるスキーマを設定し、自分を所有者にしましたが、それは良い考えですか?

私の懸念は:

  1. 所有者を設定することに加えて、この新しいスキーマを(pgAdmin IIIを介して)作成するときに、[特権]タブの項目に注意を払う必要がある場合があります。
  2. バックアップ/復元を実行する前に、パブリックスキーマにデータを保存し、すべてのデータを別のスキーマにダンプしても同じメリットが得られない場合があります(ogr2ogrを使用する場合、いくつかのキーストロークを節約できます)。そして
  3. 新しいデータスキーマに同じPostGISテーブルとビューがない(同じデータベース内のパブリックスキーマにある)ために問題が発生する場合があります。

1
新しい回答はこちらからgis.stackexchange.com/a/270522/6052
エヴァンキャロル

3
はい、まだ有効です。主なポイントは、システムデータと関数からユーザーデータを分離するためです。
ジョンパウエル

私はPostGISユーザーではありませんが、あなたの質問に対する最良の答えは現在gis.stackexchange.com/a/270522/115であると思われるので、同意する場合はAcceptチェックマークをそれに移動することをお勧めします。
PolyGeo

1
この質問は2つの質問になります。受け入れられた答えは、書かれているように質問に答えません。この質問は、PostGISオブジェクト自体がスキーマにないオブジェクトと連携できるかどうかを尋ねる質問の複製ではないため、再度開く必要がありpublicます。他の質問は、PostGIS拡張オブジェクトを以外のスキーマにインストールすることですpublic。これらは2つの異なるものです!
ケニーエビット

回答:


6

これは現在、公式サイトの「PostGIS拡張機能を別のスキーマに移動する」というタイトルのページで対処されています。正しい方法は、拡張機能をにインストールすることpublicです。これが唯一のオプションです。拡張機能は再配置をサポートしなくなりました。次に、次のコマンドを実行します(サイトからコピー)。

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
これは、書かれている質問には答えませ。それは受け入れられた答えであってはなりません。「新しいスキーマにデフォルトのPostGISテーブルとビューがない(同じデータベース内のスキーマにある)」ことを明確に求めてdatapublicます。この答えは有用であり、私が探していたものですが、質問に直接関係していません。
ケニーエビット

20

PostGISデータベースを空間的に有効化すると、関連する関数、SRSテーブル、およびビューが、宣言どおりにパブリックスキーマに配置されます。これは、独自の空間テーブルのすべてまたはいずれかが同じパブリックスキーマにある必要があるという意味ではありません。PostGISは、「新しい」スキーマのすべての空間データに対して引き続き機能します。

実際、私は通常、アプリケーション固有のテーブルを別のスキーマに配置します。そうすることで、PostGISへのメジャーバージョンアップグレードを行う必要がある場合、空間ツールを置き換えるものとは別の手順として、アプリケーション固有のテーブルのバックアップと復元を維持できます。

だから、あなたはうまくやっていると思う。最後に、まだ実行していない場合は、検索パスに新しいスキーマを追加することをお勧めします。

ALTER DATABASE my_db SET search_path = gc, public;


ありがとう、マーティン。「パブリック」以外のカスタムスキーマのテーブルで空間関数を使用できるということですか?
alextc 14

別のスキーマにデータを追加する方法、つまり じゃないpublic?例えばでデータを追加します。まだにデータを置きますか?shp2psqltest.tablepublic
knutole

@knutole。前述のように、ArcCatalogを使用してフィーチャクラスをインポート/新規作成しました。shp2psqlを使用して、パブリック以外のカスタムスキーマにデータを追加できるかどうかはわかりません。
alextc

1
これは受け入れられた答えであるはずです。
ケニーエビット

12
  1. スキーマを使用して構築できる組織的な戦略の1つは、ユーザーが1つのスキーマで横行することを許可するが、別のスキーマで物事を汚すことができないようにすることです。したがって、この方法でスキーマを使用する場合は、pgAdminの権限タブで実行できます。ただし、そうする必要はありません。したがって、複数のスキーマ間で同じ特権を維持したいだけであれば、それで問題ありません。

  2. リンクした記事に基づいて、すべてを公開することの問題は、データをダンプするときに、システムテーブルとリレーションシップがデータに混在する可能性があることです。すべてのデータを新しいスキーマに移動する場合、再度そのことを心配する必要はありません。

  3. 全く問題ありません。(証明のために、SRSテーブルを検索するときにpublic.spatial_ref_sysを指定する必要がないことに注意してください。)


6

追加のヒントが1つあります(おそらく、この問題に既に遭遇している可能性があります)。「データ」スキーマをユーザーのデフォルトのsearch_pathに追加することをお勧めします。何かのようなもの:

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

ポイント2に関して、元のDBにアクセスできなくなったときに復元する必要がある場合があります。(これがバックアップの理由の1つです...)したがって、実際に必要なときにデータを別のスキーマに移動する機会がないかもしれません。


1

一時的な分析/開発テーブルの結果にパブリックスキーマを使用してから、永続的な使用のために、より体系化されたスキーマ(フォルダー?)に進みます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.