2012-03-09 15 views

答えて

4

私はちょうどあなたの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

+0

ありがとうございました。これは参考になります。 – dan

2
--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; 
+0

驚くばかりの答え!また、組み込みのデータベース 'search_path'を使って他のスキーマを管理する方法を学びました。ありがとうございました! – jpap

関連する問題