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

转换指定两个函数:

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

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

Parameters

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

上一章 首页 下一章