CREATE EXTENSION — 拡張をインストールする
CREATE EXTENSION [ IF NOT EXISTS ]extension_name
[ WITH ] [ SCHEMAschema_name
] [ VERSIONversion
] [ CASCADE ]
CREATE EXTENSION
は現在のデータベース内に新しい拡張を読み込みます。
読み込み済みの拡張と同じ名前の拡張を読み込むことはできません。
拡張の読み込みは基本的に拡張のスクリプトファイルを実行することと同じです。
スクリプトは通常、関数、データ型、演算子、インデックスサポートメソッドなどのSQLオブジェクトを新しく作成するものです。
CREATE EXTENSION
はさらに作成したすべてのオブジェクト識別子を記録して、DROP EXTENSION
が発行された時に削除できるようにします。
CREATE EXTENSION
を実行するユーザは、後で実施される権限検査のためにその拡張の所有者となります。また通常このユーザは拡張のスクリプトにより作成されたすべてのオブジェクトの所有者となります。
拡張の読み込みでは、通常その要素オブジェクトを作成するために必要となるいくつかの権限が必要です。
多くの拡張では、これはスーパーユーザの権限が必要であることを意味します。
しかしながら、制御ファイルでtrustedと印付けされた拡張は、現在のデータベースに対してCREATE
権限を持つユーザであれば誰でもインストールできます。
この場合拡張オブジェクト自身は呼び出したユーザが所有しますが、そこに含まれるオブジェクトは(拡張スクリプトが明示的に呼び出したユーザに対して割り当てない限り)ブートストラップスーパーユーザが所有します。
この設定は呼び出したユーザに拡張を削除する権限を与えますが、その中の個々のオブジェクトを修正する権限は与えません。
IF NOT EXISTS
同じ名前の拡張がすでに存在していてもエラーにしません。 この場合注意が発せられます。 既存の拡張が、現在利用可能なスクリプトファイルより作成されるものと何かしら似たものであることは保証されません。
extension_name
インストールする拡張の名前です。
PostgreSQLはファイルSHAREDIR/extension/
extension_name
.control
から詳細を読み取り、拡張を作成します。
schema_name
拡張の内容を再配置させることができる場合に、拡張のオブジェクトをインストールするスキーマの名前です。 指定されたスキーマは事前に存在していなければなりません。 指定がなく、拡張の制御ファイルでもスキーマを指定していない場合、現在のデフォルトのオブジェクト生成用スキーマが使用されます。
拡張がその制御ファイルでschema
パラメータを指定している場合、そのスキーマをSCHEMA
句で上書きすることはできません。
SCHEMA
句が指定され、それが拡張のschema
パラメータと相容れない場合、通常はエラーが発生します。
しかし、CASCADE
句も指定されている場合は、schema_name
が相容れなければ、それを無視します。
必要なすべての拡張のインストールにおいて、それぞれの制御ファイルでschema
が指定されていなければ、指定されたschema_name
が使用されます。
拡張自体が任意のスキーマの中にあるとみなされていないことを思い出してください。 拡張は修飾がない名前を持ちますので、データベース全体で一意でなければなりません。 しかし拡張に属するオブジェクトはスキーマの中に置くことができます。
version
インストールする拡張のバージョンです。 これは識別子あるいは文字列リテラルのいずれかとして記述できます。 デフォルトのバージョンは拡張の制御ファイル内で規定したものになります。
CASCADE
この拡張が依存し、まだインストールされていないすべての拡張を自動的にインストールします。
それらが依存するものも同様に再帰的にインストールされます。
SCHEMA
句が指定されている場合は、これによってインストールされるすべての拡張に適用されます。
この文の他のオプションは自動的にインストールされる拡張には適用されません。
特に、そのデフォルトバージョンは常に選択されます。
拡張をデータベースにロードするためにCREATE EXTENSION
を使用できるようになる前に、拡張のサポートファイルがインストールされていなければなりません。
PostgreSQLが提供する拡張のインストールに関する情報は、追加で提供されるモジュールで説明します。
現在ロード可能な拡張はpg_available_extensions
またはpg_available_extension_versions
システムビューで識別できます。
スーパーユーザとして拡張をインストールするには、拡張の作者が安全な方法で拡張のインストールスクリプトを書いたと信用することが必要です。
悪意のあるユーザが、不注意に書かれた拡張スクリプトの以降の実行を危険に晒すトロイの木馬オブジェクトを作り、そのユーザがスーパーユーザの権限を得るようにするのは、それほど難しいことではありません。
しかしながら、トロイの木馬オブジェクトはスクリプト実行時にsearch_path
にある場合にのみ危険です。これは拡張のインストール対象スキーマや依存する拡張のスキーマにあるということを意味します。
そのため、スクリプトが注意深く検査されていない拡張を扱う優れた経験則は、信頼できないユーザにCREATE権限を許可していないし、今後も許可することのないスキーマにのみ、その拡張をインストールすることです。
その拡張が依存する拡張についても同様です。
PostgreSQLが提供する拡張は、他の拡張に依存する少数のものを除いて、この種のインストール時の攻撃に対して安全であると信じられています。 各拡張の文書で述べているように、拡張は安全なスキーマにインストールするか、依存する拡張と同じスキーマにインストールするか、あるいはその両方であるスキーマにインストールすべきです。
新しい拡張の作成に関しては38.17を参照してください。
そのオブジェクトをaddons
スキーマに配置して、現在のデータベースにhstore拡張をインストールします。
CREATE EXTENSION hstore SCHEMA addons;
以下は同様のことを行なう別の方法です。
SET search_path = addons; CREATE EXTENSION hstore;
CREATE EXTENSION
はPostgreSQLの拡張です。