CREATE TRANSFORM — 定義新的轉換 (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
值。 語言實作通常預設為使用文字表示法,但例如,當關聯陣列或列表更合適時,這很不方便。
轉換指定兩個函數:
「from 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
的 SQL 層級函數,而沒有至少一個 internal
類型的引數。) 實際傳回值將是語言實作特有的東西。 如果未指定引數列表,則函數名稱在其綱要中必須是唯一的。
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 擴充功能。 在SQL標準中有一個 CREATE TRANSFORM
命令,但它是用於將資料類型調整為用戶端語言。 PostgreSQL 不支援該用法。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。