CREATE OPERATOR
CREATE OPERATOR â ÑоздаÑÑ Ð¾Ð¿ÐµÑаÑоÑ
СинÑакÑиÑ
CREATE OPERATORимÑ( {FUNCTION|PROCEDURE} =имÑ_ÑÑнкÑии[, LEFTARG =Ñип_Ñлева] [, RIGHTARG =Ñип_ÑпÑава] [, COMMUTATOR =коммÑÑ_опеÑаÑоÑ] [, NEGATOR =обÑаÑнÑй_опеÑаÑоÑ] [, RESTRICT =пÑоÑедÑÑа_огÑаниÑениÑ] [, JOIN =пÑоÑедÑÑа_ÑоединениÑ] [, HASHES ] [, MERGES ] )
ÐпиÑание
CREATE OPERATOR опÑеделÑÐµÑ Ð½Ð¾Ð²Ñй опеÑаÑоÑ, имÑ. ÐладелÑÑем опеÑаÑоÑа ÑÑановиÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, его ÑоздавÑий. ÐÑли Ñказано Ð¸Ð¼Ñ ÑÑ
емÑ, опеÑаÑÐ¾Ñ ÑоздаÑÑÑÑ Ð² ней, в пÑоÑивном ÑлÑÑае â в ÑекÑÑей ÑÑ
еме.
ÐÐ¼Ñ Ð¾Ð¿ÐµÑаÑоÑа обÑазÑÐµÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð¸Ð· неÑколÑкиÑ
Ñимволов (не более Ñем NAMEDATALEN-1, по ÑмолÑÐ°Ð½Ð¸Ñ 63) из ÑледÑÑÑего ÑпиÑка:
+ - * / < > = ~ ! @ # % ^ & | ` ?
Ðднако вÑÐ±Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ огÑаниÑен еÑÑ ÑледÑÑÑими ÑÑловиÑми:
СоÑеÑÐ°Ð½Ð¸Ñ Ñимволов
--и/*не могÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² имени опеÑаÑоÑа, Ñак как они бÑдÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаÑÑ Ð½Ð°Ñало комменÑаÑиÑ.ÐногоÑимволÑное Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа не Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°ÐºÐ°Ð½ÑиваÑÑÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼
+или-, еÑли ÑолÑко оно не ÑодеÑÐ¶Ð¸Ñ Ñакже один из ÑÑÐ¸Ñ Ñимволов:
~ ! @ # % ^ & | ` ?ÐапÑимеÑ,
@-â допÑÑÑимое Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа, а*-â неÑ. ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Ð¾Ð³ÑаниÑениÑ, PostgreSQL Ð¼Ð¾Ð¶ÐµÑ ÑазбиÑаÑÑ ÐºÐ¾ÑÑекÑнÑе SQL-запÑоÑÑ Ð±ÐµÐ· пÑобелов Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñами.Символ
=>заÑезеÑвиÑован Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² гÑаммаÑике ÑзÑка SQL, поÑÑÐ¾Ð¼Ñ ÐµÐ³Ð¾ нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð² каÑеÑÑве имени опеÑаÑоÑа.
ÐпеÑаÑÐ¾Ñ != оÑобÑажаеÑÑÑ Ð² <> пÑи вводе, Ñак ÑÑо ÑÑи два имени вÑегда ÑавнознаÑнÑ.
ÐеобÑ
одимо опÑеделиÑÑ Ð»Ð¸Ð±Ð¾ LEFTARG, либо RIGHTARG, а Ð´Ð»Ñ Ð±Ð¸Ð½Ð°ÑнÑÑ
опеÑаÑоÑов оба аÑгÑменÑа. ÐÐ»Ñ Ð¿ÑавÑÑ
ÑнаÑнÑÑ
опеÑаÑоÑов должен бÑÑÑ Ð¾Ð¿ÑеделÑн ÑолÑко LEFTARG, а Ð´Ð»Ñ Ð»ÐµÐ²ÑÑ
ÑнаÑнÑÑ
â ÑолÑко RIGHTARG.
ÐÑимеÑание
ÐÑавÑе ÑнаÑнÑе, Ñакже назÑваемÑе поÑÑÑикÑнÑми, опеÑаÑоÑÑ Ð¿ÑÐ¸Ð·Ð½Ð°Ð½Ñ ÑÑÑаÑевÑими и бÑдÑÑ ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð² PostgreSQL веÑÑии 14.
ФÑнкÑÐ¸Ñ Ð¸Ð¼Ñ_ÑÑнкÑии должна бÑÑÑ Ñже опÑеделена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ CREATE FUNCTION и имеÑÑ ÑооÑвеÑÑÑвÑÑÑее ÑиÑло аÑгÑменÑов (один или два) ÑказаннÑÑ
Ñипов.
Ð ÑинÑакÑиÑе CREATE OPERATOR клÑÑевÑе Ñлова FUNCTION и PROCEDURE ÑавнознаÑнÑ, но ÑказÑÐ²Ð°ÐµÐ¼Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° в лÑбом ÑлÑÑае бÑÑÑ ÑÑнкÑией, а не пÑоÑедÑÑой. ÐлÑÑевое Ñлово PROCEDURE здеÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð¿Ð¾ иÑÑоÑиÑеÑким пÑиÑинам и ÑÑиÑаеÑÑÑ ÑÑÑаÑевÑим.
ÐÑÑгие пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе Ñ Ð°ÑакÑеÑиÑÑики опÑимизаÑии. ÐÑ Ð·Ð½Ð°Ñение опиÑано в Разделе 37.15.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¾Ð¿ÐµÑаÑоÑ, необÑ
одимо имеÑÑ Ð¿Ñаво USAGE Ð´Ð»Ñ Ñипов аÑгÑменÑов и ÑезÑлÑÑаÑа, а Ñакже пÑаво EXECUTE Ð´Ð»Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей ÑÑнкÑии. ÐÑли ÑказÑваеÑÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑий или обÑаÑнÑй опеÑаÑоÑ, нÑжно бÑÑÑ ÐµÐ³Ð¾ владелÑÑем.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ Ð¾Ð¿ÑеделÑемого опеÑаÑоÑа. ÐопÑÑÑимÑе в нÑм ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ. Указанное Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ ÑÑ ÐµÐ¼Ð¾Ð¹, напÑÐ¸Ð¼ÐµÑ Ñак:
CREATE OPERATOR myschema.+ (...). ÐÑли ÑÑ ÐµÐ¼Ð° не Ñказана, опеÑаÑÐ¾Ñ ÑоздаÑÑÑÑ Ð² ÑекÑÑей ÑÑ ÐµÐ¼Ðµ. ÐÑи ÑÑом два опеÑаÑоÑа в одной ÑÑ ÐµÐ¼Ðµ могÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ð¾ имÑ, еÑли они ÑабоÑаÑÑ Ñ ÑазнÑми Ñипами даннÑÑ . Такое опÑеделение опеÑаÑоÑов назÑваеÑÑÑ Ð¿ÐµÑегÑÑзкой.имÑ_ÑÑнкÑииФÑнкÑиÑ, ÑеализÑÑÑÐ°Ñ ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑоÑ.
Ñип_ÑлеваТип даннÑÑ Ð»ÐµÐ²Ð¾Ð³Ð¾ опеÑанда опеÑаÑоÑа, еÑли он еÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑкаеÑÑÑ Ð´Ð»Ñ Ð»ÐµÐ²ÑÑ ÑнаÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов.
Ñип_ÑпÑаваТип даннÑÑ Ð¿Ñавого опеÑанда опеÑаÑоÑа, еÑли он еÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑкаеÑÑÑ Ð´Ð»Ñ Ð¿ÑавÑÑ ÑнаÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов.
коммÑÑ_опеÑаÑоÑÐпеÑаÑоÑ, коммÑÑиÑÑÑÑий Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾.
обÑаÑнÑй_опеÑаÑоÑÐпеÑаÑоÑ, обÑаÑнÑй Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾.
пÑоÑедÑÑа_огÑаниÑениÑФÑнкÑÐ¸Ñ Ð¾Ñенки избиÑаÑелÑноÑÑи огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа.
пÑоÑедÑÑа_ÑоединениÑФÑнкÑÐ¸Ñ Ð¾Ñенки избиÑаÑелÑноÑÑи ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑого опеÑаÑоÑа.
HASHESÐоказÑваеÑ, ÑÑо ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñоединение по Ñ ÐµÑÑ.
MERGESÐоказÑваеÑ, ÑÑо ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñоединение ÑлиÑнием.
ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа Ñ Ñказанием ÑÑ
ÐµÐ¼Ñ Ð² коммÑÑ_опеÑаÑÐ¾Ñ Ð¸Ð»Ð¸ дÑÑгом дополниÑелÑном аÑгÑменÑе, пÑименÑеÑÑÑ ÑинÑакÑÐ¸Ñ OPERATOR(), напÑимеÑ:
COMMUTATOR = OPERATOR(myschema.===) ,
ÐÑимеÑаниÑ
Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 37.14.
ÐадаÑÑ Ð»ÐµÐºÑиÑеÑкий пÑиоÑиÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑа в команде CREATE OPERATOR невозможно, Ñак как обÑабоÑка пÑиоÑиÑеÑов жÑÑÑко заÑиÑа в анализаÑоÑе. ÐодÑобнее пÑиоÑиÑеÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ÐодÑазделе 4.1.6.
УÑÑаÑевÑие паÑамеÑÑÑ SORT1, SORT2, LTCMP и GTCMP Ñанее иÑполÑзовалиÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ñн опеÑаÑоÑов ÑоÑÑиÑовки, ÑвÑзаннÑÑ
Ñ Ð¾Ð¿ÐµÑаÑоÑом, пÑименÑемÑм пÑи Ñоединении ÑлиÑнием. ТепеÑÑ ÑÑо не ÑÑебÑеÑÑÑ, Ñак как инÑоÑмаÑÐ¸Ñ Ð¾ ÑвÑзаннÑÑ
опеÑаÑоÑаÑ
ÑепеÑÑ Ð´Ð°ÑÑ ÑемейÑÑва опеÑаÑоÑов B-деÑева. ÐÑли в команде оÑÑÑÑÑÑвÑÐµÑ Ñвное Ñказание MERGES, вÑе ÑÑи паÑамеÑÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ.
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑÐºÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов из Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÑименÑеÑÑÑ DROP OPERATOR, а Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ñ ÑвойÑÑв â ALTER OPERATOR.
ÐÑимеÑÑ
СледÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° опÑеделÑÐµÑ Ð½Ð¾Ð²Ñй опеÑаÑоÑ, пÑовеÑÑÑÑий ÑавенÑÑво плоÑадей, Ð´Ð»Ñ Ñипа box:
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
FUNCTION = area_equal_function,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_function,
JOIN = area_join_function,
HASHES, MERGES
);СовмеÑÑимоÑÑÑ
CREATE OPERATOR ÑвлÑеÑÑÑ ÑзÑковÑм ÑаÑÑиÑением PostgreSQL. СÑедÑÑва опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
опеÑаÑоÑов в ÑÑандаÑÑе SQL не опиÑанÑ.