VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

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没有先验知识如何在Python环境中呈现 hstore值。语言实现通常默认使用文本表示,但是例如,当关联数组或列表更合适时,这是不方便的。

转换指定了两个函数:

  • “来自SQL”函数,用于将类型从SQL环境转换为语言。将使用该语言编写的函数的参数说明调用此函数。
  • “to SQL”函数,用于将类型从语言转换为SQL环境。将使用该语言编写的函数的返回值调用此函数。

没有必要提供这两种功能。如果未指定,则必要时将使用特定于语言的默认行为。(为了防止某个方向的转换发生,你也可以写一个总是出错的转换函数。)

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

参数说明

  • type_name

    该转换的数据类型的名称。

  • lang_name

    该转换的语言的名称。

  • from_sql_function_name[(argument_type [, …])]

    将该类型从 SQL 环境转换到该语言的函数名。它必须接受一个 internal类型的参数并且返回类型internal。 实参将是该转换所适用的类型,并且该函数也应该被写成认为它是那种类型( 但是不允许声明一个返回internal但没有至少一个 internal类型参数的 SQL 层函数)。实际的返回值将与 语言的实现相关。如果没有指定参数列表,则函数名在该模式中必须唯一。

  • to_sql_function_name[(argument_type [, …])]

    将该类型从语言转换到 SQL 环境的函数名。它必须接受一个 internal类型的参数并且返回该转换所适用的类型。实参值 将与语言的实现相关。如果没有指定参数列表,则函数名在该模式中必须唯一。

注意事项

使用 DROP TRANSFORM 删除变换。

示例

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

CREATE TYPE hstore ...;

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

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

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