2013-10-02 56 views
7

私は複数のスキーマでhstoreを使用する必要があるプロジェクトに取り組んでいます。 hstore拡張機能がインストールされている 'public'スキーマは、私のスコープが 'public'で検索されないため、どこからでも利用できません。いくつかの試練では、私は 'hstore'というスキーマ上で拡張を作成し、使用されたすべての有効なスコープ(検索パス)でスキーマを使用しました。Postgresデータベースの複数のスキーマにhstoreをインストールする最も良い方法は?

これに基づき、私はいくつかの質問をしました:

  • は、それだけの拡張のためのスキーマを作成するために、OKですか?または、単一のスキーマ(例えば、customer_1customer_2など)ごとに拡張を作成する方が良いでしょうか?

  • 別のスキーマ内の拡張の作成は、データの格納場所に影響しますか?私は複数のスキーマを使用してバックアップ/リストアを簡単にしていますが、実際にはすべてのhstoreデータを1つのスキーマの隠しテーブル(BLOBの場合はpg_large_objects)に保存しないようにしています。

答えて

6

データベースごとに複数の拡張機能をインストールすることはできません。 the manual on CREATE EXTENSION引用:

は、拡張子自体は任意の のスキーマ内にあるとみなされていないことに注意してください:拡張子が データベース全体で一意である必要があります非修飾名を持っています。ただし、拡張機能に属するオブジェクトはスキーマ内にある可能性があります。

あなたsearch_pathpublicを含めたくない場合は、専用のスキーマ(例:extensions)に「公共」の拡張機能をインストールします。私はそれらのすべてに単一のスキーマを使用し、各拡張の個別のスキーマは使用しません。

CREATE EXTENSION hstore SCHEMA extensions; 

をし、スキーマはそれを利用することをお勧めしますユーザーのsearch_pathに含まれていることを確認してください:There are quite a few of them. CREATE EXTENSIONは、お好みの既存のスキーマにインストールするオプションを提供しています。

データストレージは、拡張子が常駐スキーマによってまったく影響を受けません。

+0

'拡張に拡張hstoreのをインストールするには、これを試してみてください'スキーマをsearch_pathに追加する必要がありますか? – Qcom

+1

@ Qcom:正解。また、search_path内のスキーマの順序も関連しています。 *または、参照するすべてのオブジェクト(演算子を含む)をスキーマ修飾する必要があります。詳細:http://stackoverflow.com/questions/22975599/how-to-use-operator-from-the-extension-pg-trgm/22975642#22975642 –

+0

拡張機能を専用アプリケーションにインストールする際の明快さ以外に明白な利点はありますか?スキーマを公開するのではなく、 – Qcom

0

すべてのスキーマ

create extension hstore schema pg_catalog; 
+0

'pg_catalog'に非コアなものを保存することは良い考えではないと思います –

関連する問題