CREATE TRANSFORM
CREATE TRANSFORM â ÑоздаÑÑ ÑÑанÑÑоÑмаÑиÑ
СинÑакÑиÑ
CREATE [ OR REPLACE ] TRANSFORM FORимÑ_ÑипаLANGUAGEимÑ_ÑзÑка( FROM SQL WITH FUNCTIONимÑ_ÑÑнкÑии_из_sql[ (Ñип_аÑгÑменÑа[, ...]) ], TO SQL WITH FUNCTIONимÑ_ÑÑнкÑии_в_sql[ (Ñип_аÑгÑменÑа[, ...]) ] );
ÐпиÑание
CREATE TRANSFORM опÑеделÑÐµÑ Ð½Ð¾Ð²ÑÑ ÑÑанÑÑоÑмаÑиÑ. CREATE OR REPLACE TRANSFORM либо ÑоздаÑÑ ÑÑанÑÑоÑмаÑиÑ, либо заменÑÐµÑ ÑÑÑеÑÑвÑÑÑÑÑ.
ТÑанÑÑоÑмаÑÐ¸Ñ Ð¾Ð¿ÑеделÑеÑ, как пÑеобÑазоваÑÑ Ñип даннÑÑ
Ð´Ð»Ñ Ð¿ÑоÑедÑÑного ÑзÑка. ÐапÑимеÑ, еÑли напиÑаÑÑ Ð½Ð° ÑзÑке PL/Python ÑÑнкÑиÑ, иÑполÑзÑÑÑÑÑ Ñип hstore, PL/Python заведомо не знаеÑ, как Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑедÑÑавлÑÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ hstore в ÑÑеде Python. ÐбÑÑно ÑеализаÑии ÑзÑка ниÑÑ
одÑÑ Ðº ÑекÑÑÐ¾Ð²Ð¾Ð¼Ñ Ð¿ÑедÑÑавлениÑ, но ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑдобно, когда более ÑмеÑÑен бÑл бÑ, напÑимеÑ, аÑÑоÑиаÑивнÑй маÑÑив или ÑпиÑок.
ТÑанÑÑоÑмаÑÐ¸Ñ Ð¾Ð¿ÑеделÑÐµÑ Ð´Ð²Ðµ ÑÑнкÑии:
ФÑнкÑÐ¸Ñ Â«Ð¸Ð· SQL» пÑеобÑазÑÐµÑ Ñип из ÑÑÐµÐ´Ñ SQL в ÑÑÐµÐ´Ñ ÑзÑка. ÐÑа ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð²ÑзÑваÑÑÑÑ Ð´Ð»Ñ Ð°ÑгÑменÑов ÑÑнкÑии, напиÑанной на ÑÑом ÑзÑке.
ФÑнкÑÐ¸Ñ Â«Ð² SQL» пÑеобÑазÑÐµÑ Ñип из ÑÑÐµÐ´Ñ ÑзÑка в ÑÑÐµÐ´Ñ SQL. ÐÑа ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð²ÑзÑваÑÑÑÑ Ð´Ð»Ñ Ð·Ð½Ð°ÑениÑ, возвÑаÑаемого из ÑÑнкÑии на ÑÑом ÑзÑке.
ÐÑедоÑÑавлÑÑÑ Ð¾Ð±Ðµ ÑÑи ÑÑнкÑии не ÑÑебÑеÑÑÑ, можно огÑаниÑиÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹. ÐÑли одна из Ð½Ð¸Ñ Ð½Ðµ Ñказана, пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи вÑбиÑаеÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ, пÑинÑÑое Ð´Ð»Ñ ÑзÑка по ÑмолÑаниÑ. (ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿ÐµÑекÑÑÑÑ Ð¿ÑÑÑ ÑÑанÑÑоÑмаÑии в Ð¾Ð´Ð½Ñ ÑÑоÑонÑ, можно напиÑаÑÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ñегда вÑдаваÑÑ Ð¾ÑибкÑ.)
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ ÑÑанÑÑоÑмаÑиÑ, необÑ
одимо бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем и имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ Ñипа, имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ ÑзÑка, а Ñакже бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем и имеÑÑ Ð¿Ñаво EXECUTE Ð´Ð»Ñ ÑÑнкÑий из-SQL и в-SQL, еÑли они задаÑÑÑÑ.
ÐаÑамеÑÑÑ
имÑ_ÑипаÐÐ¼Ñ Ñипа даннÑÑ , Ð´Ð»Ñ ÐºÐ¾ÑоÑого пÑедназнаÑена ÑÑанÑÑоÑмаÑиÑ.
имÑ_ÑзÑкаÐÐ¼Ñ ÑзÑка, Ð´Ð»Ñ ÐºÐ¾ÑоÑого пÑедназнаÑена ÑÑанÑÑоÑмаÑиÑ.
имÑ_ÑÑнкÑии_из_sql[(Ñип_аÑгÑменÑа[, ...])]ÐÐ¼Ñ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñипа из ÑÑÐµÐ´Ñ SQL в ÑÑÐµÐ´Ñ ÑзÑка. Ðна должна пÑинимаÑÑ Ð¾Ð´Ð¸Ð½ аÑгÑÐ¼ÐµÐ½Ñ Ñипа
internalи возвÑаÑаÑÑ Ñипinternal. ФакÑиÑеÑкий аÑгÑÐ¼ÐµÐ½Ñ Ð±ÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ñип, заданнÑй Ð´Ð»Ñ ÑÑанÑÑоÑмаÑии, и Ñама ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑаÑÑÑиÑÑваÑÑ Ð½Ð° ÑÑо. (Ðо на ÑÑовне SQL нелÑÐ·Ñ Ð¾Ð±ÑÑвиÑÑ ÑÑнкÑиÑ, возвÑаÑаÑÑÑÑ Ñипinternal, еÑли она не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм один аÑгÑÐ¼ÐµÐ½Ñ Ñипаinternal.) ФакÑиÑеÑки возвÑаÑаемое знаÑение бÑÐ´ÐµÑ Ð¾Ð¿ÑеделÑÑÑÑÑ ÑеализаÑией ÑзÑка. ÐÑли ÑпиÑок аÑгÑменÑов оÑÑÑÑÑÑвÑеÑ, Ð¸Ð¼Ñ ÑÑнкÑии должно бÑÑÑ ÑникалÑнÑм в ÐµÑ ÑÑ ÐµÐ¼Ðµ.имÑ_ÑÑнкÑии_в_sql[(Ñип_аÑгÑменÑа[, ...])]ÐÐ¼Ñ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñипа из ÑÑÐµÐ´Ñ ÑзÑка в ÑÑÐµÐ´Ñ 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.
См. Ñакже
CREATE FUNCTION, CREATE LANGUAGE, CREATE TYPE, DROP TRANSFORM