PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# ALTER FUNCTION

## 名前

ALTER FUNCTION -- 関数定義を変更する

## 概要

    ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
        action [ ... ] [ RESTRICT ]
    ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
        RENAME TO new_name
    ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
        OWNER TO new_owner
    ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
        SET SCHEMA new_schema

    ここで、actionは以下のいずれかです。

        CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
        IMMUTABLE | STABLE | VOLATILE
        [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
        COST execution_cost
        ROWS result_rows
        SET configuration_parameter { TO | = } { value | DEFAULT }
        SET configuration_parameter FROM CURRENT
        RESET configuration_parameter
        RESET ALL

## 説明

`ALTER FUNCTION`は関数定義を変更します。

`ALTER FUNCTION`を使用するには関数の所有者でなければなりません。 関数のスキーマを変更するには、新しいスキーマにおける`CREATE`権限も必要です。 所有者を変更するには、直接または間接的に新しいロールのメンバでなければなりません。 また、そのロールが関数のスキーマにおいて`CREATE`を持たなければなりません。 （この制限により、強制的に、所有者の変更が関数の削除と再作成で行うことができない何らかの処理を行わないようになります。 しかし、スーパーユーザはすべての関数の所有者を変更することができます。）

## パラメータ

`name`

  既存の関数名です（スキーマ修飾名も可）。

`argmode`

  引数のモードで、`IN`、`OUT`、`INOUT`、`VARIADIC`のいずれかです。 省略された場合のデフォルトは`IN`です。 関数の識別を行うには入力引数のみが必要ですので、実際には`ALTER FUNCTION`が`OUT`引数を無視することに注意してください。 ですので、`IN`、`INOUT`および`VARIADIC`引数を列挙することで十分です。

`argname`

  引数の名前です。 関数の識別を行うには引数のデータ型のみが必要ですので、実際には`ALTER FUNCTION`は引数の名前を無視することに注意してください。

`argtype`

  もしあれば、その関数の引数のデータ型（複数可）です。 （スキーマで修飾可能です）

`new_name`

  新しい関数名です。

`new_owner`

  新しい関数の所有者です。 関数に`SECURITY DEFINER`が指定されている場合、その後は新しい所有者の権限で関数が実行されることに注意してください。

`new_schema`

  関数の新しいスキーマです。

`CALLED ON NULL INPUT`
`RETURNS NULL ON NULL INPUT`
`STRICT`

  `CALLED ON NULL INPUT`は、引数の一部またはすべてがNULLの場合に関数が呼び出されるように変更します。 `RETURNS NULL ON NULL INPUT`もしくは`STRICT`は、引数の一部がNULLの場合に関数が呼び出されないように変更します。 詳細はCREATE FUNCTIONを参照してください。

`IMMUTABLE`
`STABLE`
`VOLATILE`

  関数の揮発性を指定した設定に変更します。 関数の揮発性に関する詳細はCREATE FUNCTIONを参照してください。

`[ EXTERNAL ] SECURITY INVOKER`
`[ EXTERNAL ] SECURITY DEFINER`

  関数のセキュリティを定義者にするか否かを変更します。 `EXTERNAL`キーワードはSQLとの互換性のためのものであり、無視されます。 この機能の詳細はCREATE FUNCTIONを参照してください。

`COST` `execution_cost`

  関数の推定実行コストを変更します。 詳細はCREATE FUNCTIONを参照してください。

`ROWS` `result_rows`

  集合を返す関数で返される推定行数を変更します。 詳細はCREATE FUNCTIONを参照してください。

`configuration_parameter`
`value`

  関数呼び出し時に設定パラメータに対して行われる代入を追加または変更します。 `value`が`DEFAULT`、またはそれと等価な`RESET`が使用された場合、関数の局所的な設定は削除されます。 このため、関数はその環境内に存在する値で実行されます。 すべての関数の局所的な設定を整理したければ`RESET ALL`を使用してください。 `SET FROM CURRENT`は、セッションにおけるパラメータの現在値を関数起動時に適用される値として保管します。

  設定可能なパラメータとその値に関する詳細は、SETおよび第18章を参照してください。

`RESTRICT`

  標準SQLとの互換性のためのものであり、無視されます。

## 例

`integer`型用の`sqrt`関数の名前を`square_root`に変更します。

    ALTER FUNCTION sqrt(integer) RENAME TO square_root;

`integer`型用の`sqrt`関数の所有者を`joe`に変更します。

    ALTER FUNCTION sqrt(integer) OWNER TO joe;

`integer`型用の`sqrt`関数のスキーマを`maths`に変更します。

    ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

関数用に検索パスを自動的に設定するように調整します。

    ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;

関数用の`search_path`の自動設定を無効にします。

    ALTER FUNCTION check_password(text) RESET search_path;

呼び出し元で使用される検索パスでこの関数が実行されるようになります。

## 互換性

この文の一部は標準SQLの`ALTER FUNCTION`文に従っています。 標準ではより多くの関数の属性を変更できますが、関数名の変更、関数を定義者の権限で実行するかどうかの変更、関数と設定パラメータ値の関連付け、関数の所有者やスキーマ、揮発性の変更を行う機能はありません。 また、標準では`RESTRICT`キーワードを必須としていますが、PostgreSQLでは省略可能です。

## 関連項目

CREATE FUNCTION, DROP FUNCTION

前のページ | ホーム | 次のページ
ALTER FOREIGN DATA WRAPPER | 上に戻る | ALTER GROUP