CREATE TRANSFORM

创建转换-定义新的转换

Synopsis

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

Description

CREATE TRANSFORM定义一个新的变换。 CREATE OR REPLACE TRANSFORM将创建新的转换,或替换现有的定义。

转换指定如何使数据类型适应过程语言。例如,当使用hstore类型在 PL/Python 中编写函数时,PL/Python 不具备如何在 Python 环境中显示hstore值的先验知识。语言实现通常默认情况下使用文本表示形式,但这在例如关联数组或列表更合适的情况下不方便。

转换指定两个函数:

  • “从 SQL”函数,将类型从 SQL 环境转换为语言。该函数将在用该语言编写的函数的参数上调用。

  • 一个“ to SQL”函数,用于将类型从语言转换为 SQL 环境。该函数将在用该语言编写的函数的返回值上调用。

不必同时提供这两种功能。如果未指定,则在必要时将使用特定于语言的默认行为。 (要完全避免沿某个方向进行转换,您还可以编写一个总是出错的转换函数.)

为了能够创建转换,您必须对类型拥有USAGE特权,对语言具有USAGE特权,并且对 from-SQL 和 to-SQL 函数(如果已指定)拥有EXECUTE特权。

Parameters

  • type_name

    • 转换的数据类型的名称。
  • lang_name

    • 转换语言的名称。
  • from_sql_function_name[(argument_type [, ...])]

    • 用于将类型从 SQL 环境转换为语言的函数的名称。它必须接受类型为internal的一个参数并返回类型为internal。实际参数将为转换的类型,并且应将函数编码为好像是这样。 (但是不允许声明不带至少一个internal类型的参数而返回internal的 SQL 级函数.)实际的返回值将是特定于语言实现的值。如果未指定参数列表,则函数名称在其架构中必须唯一。
  • to_sql_function_name[(argument_type [, ...])]

    • 用于将类型从语言转换为 SQL 环境的函数的名称。它必须接受一个类型为internal的参数,并返回该类型即为转换的类型。实际参数值将是特定于语言实现的值。如果未指定参数列表,则函数名称在其架构中必须唯一。

Notes

使用DROP TRANSFORM删除转换。

Examples

要为类型hstore和语言plpythonu创建转换,请首先设置类型和语言:

CREATE TYPE hstore ...;

CREATE LANGUAGE plpythonu ...;

然后创建必要的功能:

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

实际上,这些命令将包含在 extensions 中。

contrib部分包含许多提供转换的扩展,可以作为实际示例。

Compatibility

CREATE TRANSFORM的这种形式是 PostgreSQL 扩展。 SQL 标准中有一个CREATE TRANSFORM命令,但是它用于使数据类型适应 Client 端语言。 PostgreSQL 不支持该用法。

See Also

CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM