標準のPostGISインストールプロセス(http://postgis.refractions.net/docs/ch02.html)で作成されたPostGIS定義と同じパブリックスキーマにすべてのテーブル定義をスローする必要はありません。postgisオブジェクトと関数定義を別々のスキーマにロードするにはどうすればよいですか?
PostGISを使用しているときに別のスキーマを整理しておく方法はありますか?
標準のPostGISインストールプロセス(http://postgis.refractions.net/docs/ch02.html)で作成されたPostGIS定義と同じパブリックスキーマにすべてのテーブル定義をスローする必要はありません。postgisオブジェクトと関数定義を別々のスキーマにロードするにはどうすればよいですか?
PostGISを使用しているときに別のスキーマを整理しておく方法はありますか?
私はちょうどあなたのrelated preceding questionに答えとして、私はすべてのであなたのオブジェクトに対してpublic
スキーマを使用しないをお勧めします。 PostGisのような拡張機能のためにそれを予約し、あなたのオブジェクトのための1つ以上の別々のスキーマを使用してください。
パブリック・スキーマは、データベース内の他のスキーマと決して異なるものではありません。 PostgreSQLはそれを必要としません。多くの拡張機能が自分のものを置くデフォルトのスキーマになります。だからあなたのものを別の場所に置き、必要な場所にsearch_path
を設定してください。
また、一致するプリセットsearch_path
を持つ対応するユーザーを作成することもできます。あなたはまた、ユーザーやスキーマのDEFAULT PRIVILEGES
に興味があるでしょう
CREATE ROLE sales;
ALTER ROLE sales SET search_path=sales, public; -- postgis functions in public?
COMMENT ON ROLE sales IS 'Sales app uses this user to connect.';
CREATE ROLE sales_admin;
ALTER ROLE sales_admin SET search_path=sales, public;
COMMENT ON ROLE sales_admin IS 'Owns objects in schema sales.';
CREATE SCHEMA sales;
GRANT ALL ON SCHEMA sales TO sales_admin;
GRANT USAGE ON SCHEMA sales TO sales;
COMMENT ON SCHEMA sales IS 'All objects for my sales app here.'
:基本的な設定は次のようなものを見ることができます。この密接に関連する質問の下の詳細:
Grant all on a specific schema in the db to a group role in PostgreSQL
--start out with it in public:
create extension postgis;
--add other extensions that depend on postgis being in public schema like postgis_tiger_geocoder
--then move it
create schema postgis;
grant all on schema postgis to public;
alter database [database_name] set search_path = "$user", public, postgis;
alter extension postgis set schema postgis;
驚くばかりの答え!また、組み込みのデータベース 'search_path'を使って他のスキーマを管理する方法を学びました。ありがとうございました! – jpap
ありがとうございました。これは参考になります。 – dan