43

私はPostgresQL 9.1.1を使用して、すべてのスキーマで拡張機能を利用できるようにしようとしています

だから私はコマンドを実行しましたCREATE EXTENSION unaccent;。これは機能しますが、に設定されている現在のスキーマに対してのみですsearch_path。これは、search_path を変更すると、 を呼び出せなくなることを意味しますunaccent。この拡張機能を特定のデータベースのすべてのスキーマで使用できるようにするにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

19

同じ質問がありましたが、@Richard Huxton の回答が正しい解決策につながりました:

create extension unaccent schema pg_catalog;

これは機能します!!

リチャードが言ったように、pg_catalogは自動的に (黙って) それぞれに追加されますsearch_path。そこに追加された拡張機能が見つかります。

これは、拡張機能がグローバルである場合よりもはるかに優れています。schema.func()

たとえば、私は多くのスキーマを使用しています。私はデバッグにスキーマを使用しますPUBLIC- すべてが独自のスキーマにある必要があります。何かが PUBLIC にある場合、それは間違っています。

で拡張機能を作成すると、pg_catalogすべてのスキーマがクリーンに保たれ、スキーマ自体がコア postgres の一部であるかのように機能します。

于 2013-04-21T06:40:44.390 に答える
14

あなたはそうしない。必要に応じて、いつでも完全修飾と呼ぶことができます。

SELECT <schema>.<function>(...)

実際、組み込み関数が常に利用できる唯一の理由は、何をしても PG が search_path の最後に pg_catalog を追加するからだと思います。

于 2012-10-20T09:13:54.417 に答える