他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

CREATE EXTENSION

CREATE EXTENSION — 拡張をインストールする

概要

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
             [ VERSION version ]
             [ FROM old_version ]
             [ CASCADE ]

説明

CREATE EXTENSIONは現在のデータベース内に新しい拡張を読み込みます。 読み込み済みの拡張と同じ名前の拡張を読み込むことはできません。

拡張の読み込みは基本的に拡張のスクリプトファイルを実行することと同じです。 スクリプトは通常、関数、データ型、演算子、インデックスサポートメソッドなどのSQLオブジェクトを新しく作成するものです。 CREATE EXTENSIONはさらに作成したすべてのオブジェクト識別子を記録して、DROP EXTENSIONが発行された時に削除できるようにします。

拡張の読み込みでは、その要素オブジェクトを作成するために必要となるいくつかの権限が必要です。 ほとんどの拡張で、これはスーパーユーザもしくはデータベース所有者の権限が必要であることを意味します。 CREATE EXTENSIONを実行するユーザが、後の権限検査の際に拡張の所有者となります。 同様にこのユーザは拡張のスクリプトにより作成されたすべてのオブジェクトの所有者となります。

パラメータ

IF NOT EXISTS

同じ名前の拡張がすでに存在していてもエラーにしません。 この場合注意が発せられます。 既存の拡張が、現在利用可能なスクリプトファイルより作成されるものと何かしら似たものであることは保証されません。

extension_name

インストールする拡張の名前です。 PostgreSQLはファイルSHAREDIR/extension/extension_name.controlから詳細を読み取り、拡張を作成します。

schema_name

拡張の内容を再配置させることができる場合に、拡張のオブジェクトをインストールするスキーマの名前です。 指定されたスキーマは事前に存在していなければなりません。 指定がなく、拡張の制御ファイルでもスキーマを指定していない場合、現在のデフォルトのオブジェクト生成用スキーマが使用されます。

拡張がその制御ファイルでschemaパラメータを指定している場合、そのスキーマをSCHEMA句で上書きすることはできません。 SCHEMA句が指定され、それが拡張のschemaパラメータと相容れない場合、通常はエラーが発生します。 しかし、CASCADE句も指定されている場合は、schema_nameが相容れなければ、それを無視します。 必要なすべての拡張のインストールにおいて、それぞれの制御ファイルでschemaが指定されていなければ、指定されたschema_nameが使用されます。

拡張自体が任意のスキーマの中にあるとみなされていないことを思い出してください。 拡張は修飾がない名前を持ちますので、データベース全体で一意でなければなりません。 しかし拡張に属するオブジェクトはスキーマの中に置くことができます。

version

インストールする拡張のバージョンです。 これは識別子あるいは文字列リテラルのいずれかとして記述できます。 デフォルトのバージョンは拡張の制御ファイル内で規定したものになります。

old_version

FROM old_versionは、 単なるオブジェクトの集合で拡張としてパッケージ化されていない古い形式のモジュールを置き換えるために拡張をインストールする時、この場合のみに指定しなければなりません。 このオプションによりCREATE EXTENSIONは、新しいオブジェクトを作成するのではなく、既存のオブジェクトをパッケージに取り入れる別のインストールスクリプトを実行するようになります。 すでに存在するオブジェクトを含有するスキーマをSCHEMAで指定することに注意してください。

old_versionで使用する値は拡張の作成者が決定しますので、 拡張にアップグレード可能な古い形式のモジュールのバージョンが1つ以上存在する場合に変動する可能性があります。 PostgreSQL 9.1より前で提供された標準の追加モジュールでは、モジュールを拡張形式にアップグレードする時old_versionにはunpackagedを使用してください。

CASCADE

この拡張が依存し、まだインストールされていないすべての拡張を自動的にインストールします。 それらが依存するものも同様に再帰的にインストールされます。 SCHEMA句が指定されている場合は、これによってインストールされるすべての拡張に適用されます。 この文の他のオプションは自動的にインストールされる拡張には適用されません。 特に、そのデフォルトバージョンは常に選択されます。

注釈

拡張をデータベースにロードするためにCREATE EXTENSIONを使用できるようになる前に、拡張のサポートファイルがインストールされていなければなりません。 PostgreSQLが提供する拡張のインストールに関する情報は、追加で提供されるモジュールで説明します。

現在ロード可能な拡張はpg_available_extensionsまたはpg_available_extension_versionsシステムビューで識別できます。

注意

スーパーユーザとして拡張をインストールするには、拡張の作者が安全な方法で拡張のインストールスクリプトを書いたと信用することが必要です。 悪意のあるユーザが、不注意に書かれた拡張スクリプトの以降の実行を危険に晒すトロイの木馬オブジェクトを作り、そのユーザがスーパーユーザの権限を得るようにするのは、それほど難しいことではありません。 しかしながら、トロイの木馬オブジェクトはスクリプト実行時にsearch_pathにある場合にのみ危険です。これは拡張のインストール対象スキーマや依存する拡張のスキーマにあるということを意味します。 そのため、スクリプトが注意深く検査されていない拡張を扱う優れた経験則は、信頼できないユーザにCREATE権限を許可していないし、今後も許可することのないスキーマにのみ、その拡張をインストールすることです。 その拡張が依存する拡張についても同様です。

PostgreSQLが提供する拡張は、他の拡張に依存する少数のものを除いて、この種のインストール時の攻撃に対して安全であると信じられています。 各拡張の文書で述べているように、拡張は安全なスキーマにインストールするか、依存する拡張と同じスキーマにインストールするか、あるいはその両方であるスキーマにインストールすべきです。

新しい拡張の作成に関しては37.17を参照してください。

そのオブジェクトをaddonsスキーマに配置して、現在のデータベースにhstore拡張をインストールします。

CREATE EXTENSION hstore SCHEMA addons;

以下は同様のことを行なう別の方法です。

SET search_path = addons;
CREATE EXTENSION hstore;

9.1より前にインストールされたhstoreを拡張形式に更新します。

CREATE EXTENSION hstore SCHEMA public FROM unpackaged;

既存のhstoreオブジェクトをインストールしたスキーマを注意して指定してください。

互換性

CREATE EXTENSIONPostgreSQLの拡張です。

関連項目

ALTER EXTENSION, DROP EXTENSION