★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 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 TRANSFORM

CREATE TRANSFORM — 新しい変換を定義する

概要

CREATE [ OR REPLACE ] TRANSFORM FOR type_name LANGUAGE lang_name (
    FROM SQL WITH FUNCTION from_sql_function_name [ (argument_type [, ...]) ],
    TO SQL WITH FUNCTION to_sql_function_name [ (argument_type [, ...]) ]
);

説明

CREATE TRANSFORMは新しい変換を定義します。 CREATE OR REPLACE TRANSFORMは新しい変換を作成するか、あるいは既存の変換を置換します。

変換はデータ型を手続き言語にどのように適合させるかを定義します。 例えばhstore型を使ってPL/Pythonの関数を書くとき、PL/Pythonはhstoreの値をPythonの環境でどのように表現するか、事前の知識がありません。 言語の実装は通常、デフォルトでテキスト表現を使いますが、これは例えば連想配列やリストの方がより適切な場合には不便です。

変換では次の2つの関数を指定します。

  • from SQL関数では、型をSQL環境から言語へと変換します。 この関数は、その言語で記述された関数の引数で呼び出されます。

  • to SQL関数では、型を言語からSQL環境へと変換します。 この関数は、その言語で記述された関数の戻り値で呼び出されます。

これらの関数を両方とも提供する必要はありません。 一方が指定されなければ、必要な時はその言語独自のデフォルトの動作が使われます。 (ある方向への変換がまったく起きないようにするためには、必ずエラーを発生させる変換関数を作成することもできます。)

変換を作成するには、その型を所有し、そのUSAGE権限があること、言語のUSAGE権限があること、from-SQL関数あるいはto-SQL関数を指定する場合は、それらを所有し、そのEXECUTE権限があることが必要です。

パラメータ

type_name

変換の対象となるデータ型の名前です。

lang_name

変換の対象となる言語の名前です。

from_sql_function_name[(argument_type [, ...])]

型をSQL環境から言語に変換する関数の名前です。 internal型の引数を1つとり、internal型の値を戻します。 実引数は変換される型になり、関数はそうであるとしてコーディングされます。 (しかし、少なくとも1つのinternal型の引数がなければ、internalを戻すSQLレベルの関数を宣言することができません。) 実際の戻り値は、言語の実装に依存したものになります。 引数リストが指定されない場合、関数名はスキーマ内で一意でなければなりません。

to_sql_function_name[(argument_type [, ...])]

型を言語からSQL環境に変換する関数の名前です。 internal型の引数を1つとり、変換の型であるデータ型を戻します。 実引数の値は言語の実装に依存したものになります。 引数リストが指定されない場合、関数名はスキーマ内で一意でなければなりません。

注釈

変換を削除するにはDROP TRANSFORMを使います。

hstore型で言語plpythonuの変換を作成するため、まず以下のように型と言語を設定します。

CREATE TYPE hstore ...;

CREATE EXTENSION plpythonu;

Then create the necessary functions:

CREATE FUNCTION hstore_to_plpython(val internal) RETURNS internal
LANGUAGE C STRICT IMMUTABLE
AS ...;

CREATE FUNCTION plpython_to_hstore(val internal) RETURNS hstore
LANGUAGE C STRICT IMMUTABLE
AS ...;

そして最後に、それらを互いに接続する変換を以下のように作成します。

CREATE TRANSFORM FOR hstore LANGUAGE plpythonu (
    FROM SQL WITH FUNCTION hstore_to_plpython(internal),
    TO SQL WITH FUNCTION plpython_to_hstore(internal)
);

現実には、これらのコマンドは拡張の中にまとめられているでしょう。

contribの下には変換を提供するいくつかの拡張が含まれており、それらは現実世界での例となります。

互換性

この構文のCREATE TRANSFORMPostgreSQLの拡張です。 標準SQLにはCREATE TRANSFORMコマンドがありますが、それはデータ型をクライアントの言語に適合させるためのものです。 その使用法はPostgreSQLではサポートされていません。

関連項目

CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM