W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
CREATE TRANSFORM — 定義一個(gè)新的轉(zhuǎn)換
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
定義一種新的轉(zhuǎn)換。 CREATE OR REPLACE TRANSFORM
將 創(chuàng)建一種新的轉(zhuǎn)換或者替換現(xiàn)有的定義。
一種轉(zhuǎn)換指定了如何把一種數(shù)據(jù)類型適配到一種過程語言。例如,在用 PL/Python 編寫一個(gè)使用hstore
類型的函數(shù)時(shí),PL/Python 沒有關(guān)于如何在 Python 環(huán)境中表示hstore
值的先驗(yàn)知識。 語言的實(shí)現(xiàn)通常默認(rèn)會使用文本表示,但是在一些時(shí)候這很不方便,例如 有時(shí)可能用一個(gè)聯(lián)合數(shù)組或者列表更合適。
一種轉(zhuǎn)換指定了兩個(gè)函數(shù):
一個(gè)“from SQL”函數(shù)負(fù)責(zé)將類型從 SQL 環(huán)境轉(zhuǎn)換到語言。 這個(gè)函數(shù)將在該語言編寫的一個(gè)函數(shù)的參數(shù)上調(diào)用。
一個(gè)“to SQL”函數(shù)負(fù)責(zé)將類型從語言轉(zhuǎn)換到 SQL 環(huán)境。這 個(gè)函數(shù)將在該語言編寫的一個(gè)函數(shù)的返回值上調(diào)用。
沒有必要同時(shí)提供這些函數(shù)。如果有一種沒有被指定,將在必要時(shí)使用與語言相 關(guān)的默認(rèn)行為(為了完全阻止在一個(gè)方向上發(fā)生轉(zhuǎn)換,你也可以寫一個(gè)總是報(bào)錯(cuò) 的轉(zhuǎn)換函數(shù))。
要?jiǎng)?chuàng)建一種轉(zhuǎn)換,你必須擁有該類型并且具有該類型上的 USAGE
特權(quán),擁有該語言上的 USAGE
特權(quán),并且擁有 from-SQL 和 to-SQL 函數(shù)(如果 指定了)及其上的EXECUTE
特權(quán)。
type_name
該轉(zhuǎn)換的數(shù)據(jù)類型的名稱。
lang_name
該轉(zhuǎn)換的語言的名稱。
from_sql_function_name
[(argument_type
[, ...])]
將該類型從 SQL 環(huán)境轉(zhuǎn)換到該語言的函數(shù)名。它必須接受一個(gè) internal
類型的參數(shù)并且返回類型internal
。 實(shí)參將是該轉(zhuǎn)換所適用的類型,并且該函數(shù)也應(yīng)該被寫成認(rèn)為它是那種類型( 但是不允許聲明一個(gè)返回internal
但沒有至少一個(gè) internal
類型參數(shù)的 SQL 層函數(shù))。實(shí)際的返回值將與
語言的實(shí)現(xiàn)相關(guān)。如果沒有指定參數(shù)列表,則函數(shù)名在該模式中必須唯一。
to_sql_function_name
[(argument_type
[, ...])]
將該類型從語言轉(zhuǎn)換到 SQL 環(huán)境的函數(shù)名。它必須接受一個(gè) internal
類型的參數(shù)并且返回該轉(zhuǎn)換所適用的類型。實(shí)參值 將與語言的實(shí)現(xiàn)相關(guān)。如果沒有指定參數(shù)列表,則函數(shù)名在該模式中必須唯一。
使用DROP TRANSFORM移除轉(zhuǎn)換。
要為類型hstore
和語言 plpythonu
創(chuàng)建一種轉(zhuǎn)換,先搞定該類型和語言:
CREATE TYPE hstore ...;
CREATE EXTENSION plpythonu;
然后創(chuàng)建需要的函數(shù):
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 ...;
最后創(chuàng)建轉(zhuǎn)換把它們連接起來:
CREATE TRANSFORM FOR hstore LANGUAGE plpythonu (
FROM SQL WITH FUNCTION hstore_to_plpython(internal),
TO SQL WITH FUNCTION plpython_to_hstore(internal)
);
實(shí)際上,這些命令將被包裹在擴(kuò)展中。
contrib
小節(jié)包含了一些提供轉(zhuǎn)換的擴(kuò)展, 它們可以作為實(shí)際的例子。
這種形式的CREATE TRANSFORM
是一種 PostgreSQL擴(kuò)展。在 SQL標(biāo)準(zhǔn)中有一個(gè)CREATE
TRANSFORM
命令,但是它是用于把數(shù)據(jù)類型適配到 客戶端語言。該用法不受 PostgreSQL支持。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: