9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面

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值的知识。语言实现通常默认使用文本表示, 但是当例如关联数组或列表更合适时,这是不方便的。

一个变换指定两个函数:

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

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

参数

type_name

变换的数据类型的名称。

lang_name

变换的语言的名称。

from_sql_function_name(argument_type [, ...])

用于将类型从SQL环境转换为语言的函数的名称。它必须接受一个类型为 internal的参数并且返回类型为internal。 实际的参数将是变换的类型,函数应该被编码,如果它是。 (但是不允许声明一个SQL级函数返回internal, 而没有至少一个类型为internal的参数。) 实际的返回值将是特定于语言实现的。

to_sql_function_name(argument_type [, ...])

用于将类型从语言转换为SQL环境的函数的名称。它必须接受一个类型为 internal的参数,并返回作为转换类型的类型。 实际的参数值将是特定于语言实现的。

注意

使用DROP TRANSFORM移除转换。

示例

要为类型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)
);

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

contrib部分包含多个提供转换的扩展,它们可以作为现实世界的例子。

兼容性

这种形式的CREATE TRANSFORM是一个 PostgreSQL扩展。 在SQL标准中有一个CREATE TRANSFORM命令, 但它用于将数据类型适配为客户端语言。 PostgreSQL不支持这种用法。

又见

CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM

<
/BODY >