バージョンごとのドキュメント一覧

CREATE TRANSFORM

CREATE TRANSFORM <refpurpose>define a new transform</refpurpose> — 新しい変換を定義する

概要

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 [, ...]) ]
);

説明

<title>Description</title>

<command>CREATE TRANSFORM</command> defines a new transform. <command>CREATE OR REPLACE TRANSFORM</command> will either create a new transform, or replace an existing definition. CREATE TRANSFORMは新しい変換を定義します。 CREATE OR REPLACE TRANSFORMは新しい変換を作成するか、あるいは既存の変換を置換します。

A transform specifies how to adapt a data type to a procedural language. For example, when writing a function in PL/Python using the <type>hstore</type> type, PL/Python has no prior knowledge how to present <type>hstore</type> values in the Python environment. Language implementations usually default to using the text representation, but that is inconvenient when, for example, an associative array or a list would be more appropriate. 変換はデータ型を手続き言語にどのように適合させるかを定義します。 例えばhstore型を使ってPL/Pythonの関数を書くとき、PL/Pythonはhstoreの値をPythonの環境でどのように表現するか、事前の知識がありません。 言語の実装は通常、デフォルトでテキスト表現を使いますが、これは例えば連想配列やリストの方がより適切な場合には不便です。

A transform specifies two functions: 変換では次の2つの関数を指定します。

  • A <quote>from SQL</quote> function that converts the type from the SQL environment to the language. This function will be invoked on the arguments of a function written in the language. from SQL関数では、型をSQL環境から言語へと変換します。 この関数は、その言語で記述された関数の引数で呼び出されます。

  • A <quote>to SQL</quote> function that converts the type from the language to the SQL environment. This function will be invoked on the return value of a function written in the language. to SQL関数では、型を言語からSQL環境へと変換します。 この関数は、その言語で記述された関数の戻り値で呼び出されます。

It is not necessary to provide both of these functions. If one is not specified, the language-specific default behavior will be used if necessary. (To prevent a transformation in a certain direction from happening at all, you could also write a transform function that always errors out.) これらの関数を両方とも提供する必要はありません。 一方が指定されなければ、必要な時はその言語独自のデフォルトの動作が使われます。 (ある方向への変換がまったく起きないようにするためには、必ずエラーを発生させる変換関数を作成することもできます。)

To be able to create a transform, you must own and have <literal>USAGE</literal> privilege on the type, have <literal>USAGE</literal> privilege on the language, and own and have <literal>EXECUTE</literal> privilege on the from-SQL and to-SQL functions, if specified. 変換を作成するには、その型を所有し、そのUSAGE権限があること、言語のUSAGE権限があること、from-SQL関数あるいはto-SQL関数を指定する場合は、それらを所有し、そのEXECUTE権限があることが必要です。

パラメータ

<title>Parameters</title>
type_name

The name of the data type of the transform. 変換の対象となるデータ型の名前です。

lang_name

The name of the language of the transform. 変換の対象となる言語の名前です。

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

The name of the function for converting the type from the SQL environment to the language. It must take one argument of type <type>internal</type> and return type <type>internal</type>. The actual argument will be of the type for the transform, and the function should be coded as if it were. (But it is not allowed to declare an SQL-level function returning <type>internal</type> without at least one argument of type <type>internal</type>.) The actual return value will be something specific to the language implementation. If no argument list is specified, the function name must be unique in its schema. 型をSQL環境から言語に変換する関数の名前です。 internal型の引数を1つとり、internal型の値を戻します。 実引数は変換される型になり、関数はそうであるとしてコーディングされます。 (しかし、少なくとも1つのinternal型の引数がなければ、internalを戻すSQLレベルの関数を宣言することができません。) 実際の戻り値は、言語の実装に依存したものになります。 引数リストが指定されない場合、関数名はスキーマ内で一意でなければなりません。

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

The name of the function for converting the type from the language to the SQL environment. It must take one argument of type <type>internal</type> and return the type that is the type for the transform. The actual argument value will be something specific to the language implementation. If no argument list is specified, the function name must be unique in its schema. 型を言語からSQL環境に変換する関数の名前です。 internal型の引数を1つとり、変換の型であるデータ型を戻します。 実引数の値は言語の実装に依存したものになります。 引数リストが指定されない場合、関数名はスキーマ内で一意でなければなりません。

注釈

<title>Notes</title>

Use <link linkend="sql-droptransform"><command>DROP TRANSFORM</command></link> to remove transforms. 変換を削除するにはDROP TRANSFORMを使います。

<title>Examples</title>

To create a transform for type <type>hstore</type> and language <literal>plpython3u</literal>, first set up the type and the language: hstore型で言語plpython3uの変換を作成するため、まず以下のように型と言語を設定します。

CREATE TYPE hstore ...;

CREATE EXTENSION plpython3u;

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 ...;

And finally create the transform to connect them all together: そして最後に、それらを互いに接続する変換を以下のように作成します。

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

In practice, these commands would be wrapped up in an extension. 現実には、これらのコマンドは拡張の中にまとめられているでしょう。

The <filename>contrib</filename> section contains a number of extensions that provide transforms, which can serve as real-world examples. contribの下には変換を提供するいくつかの拡張が含まれており、それらは現実世界での例となります。

互換性

<title>Compatibility</title>

This form of <command>CREATE TRANSFORM</command> is a <productname>PostgreSQL</productname> extension. There is a <command>CREATE TRANSFORM</command> command in the <acronym>SQL</acronym> standard, but it is for adapting data types to client languages. That usage is not supported by <productname>PostgreSQL</productname>. この構文のCREATE TRANSFORMPostgreSQLの拡張です。 標準SQLにはCREATE TRANSFORMコマンドがありますが、それはデータ型をクライアントの言語に適合させるためのものです。 その使用法はPostgreSQLではサポートされていません。

関連項目

<title>See Also</title>

CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM