CREATE TRANSFORM — 定義一個新的轉換
CREATE [ OR REPLACE ] TRANSFORM FORtype_name
LANGUAGElang_name
( FROM SQL WITH FUNCTIONfrom_sql_function_name
[ (argument_type
[, ...]) ], TO SQL WITH FUNCTIONto_sql_function_name
[ (argument_type
[, ...]) ] );
CREATE TRANSFORM
定義了一個新的轉換。 CREATE OR REPLACE TRANSFORM
將會建立新轉換,或替換現有定義。
轉換指定了如何將一個數據型別適配到過程語言。例如,當使用 hstore
型別在 PL/Python 中編寫函式時,PL/Python 並沒有預先知道如何在 Python 環境中呈現 hstore
值。語言實現通常預設使用文字表示,但這在例如,使用關聯陣列或列表會更合適時,會很不方便。
轉換指定了兩個函式
一個“從 SQL”函式,用於將資料型別從 SQL 環境轉換為語言環境。當呼叫用該語言編寫的函式的引數時,將呼叫此函式。
一個“到 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
型別和 plpython3u
語言建立轉換,請首先設定型別和語言
CREATE TYPE hstore ...; CREATE EXTENSION plpython3u;
然後建立必要的函式
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 plpython3u ( FROM SQL WITH FUNCTION hstore_to_plpython(internal), TO SQL WITH FUNCTION plpython_to_hstore(internal) );
實際上,這些命令將被包裝在一個擴充套件中。
contrib
部分包含一些提供轉換的擴充套件,它們可以作為實際的例子。
此形式的 CREATE TRANSFORM
是 PostgreSQL 的一個擴充套件。在SQLSQL 標準中存在一個 CREATE TRANSFORM
命令,用於將資料型別適配到客戶端語言。 PostgreSQL 不支援這種用法。
如果您在文件中看到任何不正確、與您對特定功能的使用經驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。