CREATE OPERATOR CLASS
CREATE OPERATOR CLASS â ÑоздаÑÑ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов
СинÑакÑиÑ
CREATE OPERATOR CLASSимÑ[ DEFAULT ] FOR TYPEÑип_даннÑÑUSINGиндекÑнÑй_меÑод[ FAMILYимÑ_ÑемейÑÑва] AS { OPERATORномеÑ_ÑÑÑаÑегииимÑ_опеÑаÑоÑа[ (Ñип_опеÑанда,Ñип_опеÑанда) ] [ FOR SEARCH | FOR ORDER BYÑемейÑÑво_ÑоÑÑиÑовки] | FUNCTIONномеÑ_опоÑной_ÑÑнкÑии[ (Ñип_опеÑанда[ ,Ñип_опеÑанда] ) ]имÑ_ÑÑнкÑии(Ñип_аÑгÑменÑа[, ...] ) | STORAGEÑип_Ñ ÑанениÑ} [, ... ]
ÐпиÑание
CREATE OPERATOR CLASS ÑоздаÑÑ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов. ÐлаÑÑ Ð¾Ð¿ÐµÑаÑоÑов ÑÑÑанавливаеÑ, как даннÑй Ñип бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² индекÑе, опÑеделÑÑ, какие опеÑаÑоÑÑ Ð¸ÑполнÑÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑе Ñоли или «ÑÑÑаÑегии» Ð´Ð»Ñ ÑÑого Ñипа даннÑÑ
и меÑода индекÑа. Также клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов опÑеделÑÐµÑ Ð¾Ð¿Ð¾ÑнÑе ÑÑнкÑии, коÑоÑÑе бÑÐ´ÐµÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¼ÐµÑод индекÑа в ÑлÑÑае вÑбоÑа данного клаÑÑа Ð´Ð»Ñ ÑÑолбÑа индекÑа. ÐÑе опеÑаÑоÑÑ Ð¸ ÑÑнкÑии, иÑполÑзÑемÑе клаÑÑом опеÑаÑоÑов, Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑеÑÑвоваÑÑ Ð´Ð¾ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑого клаÑÑа.
ÐÑли ÑказÑваеÑÑÑ Ð¸Ð¼Ñ ÑÑ ÐµÐ¼Ñ, клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов ÑоздаÑÑÑÑ Ð² Ñказанной ÑÑ ÐµÐ¼Ðµ, в пÑоÑивном ÑлÑÑае â в ÑекÑÑей. Ðва клаÑÑа опеÑаÑоÑов в одной ÑÑ ÐµÐ¼Ðµ могÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе имена, ÑолÑко еÑли они пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÑазнÑÑ Ð¼ÐµÑодов индекÑа.
ÐладелÑÑем клаÑÑа опеÑаÑоÑов ÑÑановиÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑоздавÑий его. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑоздаваÑÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов могÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели. (ÐÑо огÑаниÑение введено поÑомÑ, ÑÑо оÑибоÑное опÑеделение клаÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð½Ð°ÑÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ даже Ñбой в ÑабоÑе ÑеÑвеÑа.)
CREATE OPERATOR CLASS в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ пÑовеÑÑеÑ, вклÑÑÐ°ÐµÑ Ð»Ð¸ опÑеделение клаÑÑа опеÑаÑоÑов вÑе опеÑаÑоÑÑ Ð¸ ÑÑнкÑии, ÑÑебÑемÑе Ð´Ð»Ñ Ð¼ÐµÑода индекÑа, и обÑазÑÑÑ Ð»Ð¸ они ÑелоÑÑнÑй набоÑ. ÐÑвеÑÑÑвенноÑÑÑ Ð·Ð° пÑавилÑноÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов Ð»ÐµÐ¶Ð¸Ñ Ð½Ð° полÑзоваÑеле.
СвÑзаннÑе клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов могÑÑ Ð±ÑÑÑ ÑгÑÑппиÑÐ¾Ð²Ð°Ð½Ñ Ð² ÑемейÑÑва опеÑаÑоÑов. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð¼ÐµÑÑиÑÑ ÐºÐ»Ð°ÑÑ Ð² ÑÑÑеÑÑвÑÑÑее ÑемейÑÑво, добавÑÑе паÑамеÑÑ FAMILY в CREATE OPERATOR CLASS. Ðез ÑÑого паÑамеÑÑа новÑй клаÑÑ Ð¿Ð¾Ð¼ÐµÑаеÑÑÑ Ð² ÑемейÑÑво, имеÑÑее Ñо же имÑ, ÑÑо и клаÑÑ (еÑли Ñакое ÑемейÑÑво не ÑÑÑеÑÑвÑеÑ, оно ÑоздаÑÑÑÑ).
Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 36.15.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ Ñоздаваемого клаÑÑа опеÑаÑоÑов, возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹.
DEFAULTÐÑли пÑиÑÑÑÑÑвÑÐµÑ ÑÑо Ñказание, клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов ÑÑановиÑÑÑ ÐºÐ»Ð°ÑÑом по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ñвоего Ñипа даннÑÑ . ÐÐ»Ñ Ð¾Ð¿ÑеделÑнного Ñипа даннÑÑ Ð¸ меÑода индекÑа можно опÑеделиÑÑ Ð½Ðµ болÑÑе одного клаÑÑа опеÑаÑоÑов по ÑмолÑаниÑ.
Ñип_даннÑÑТип даннÑÑ ÑÑолбÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого пÑедназнаÑен ÑÑÐ¾Ñ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов.
индекÑнÑй_меÑодÐÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑного меÑода, Ð´Ð»Ñ ÐºÐ¾ÑоÑого пÑедназнаÑен ÑÑÐ¾Ñ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов.
имÑ_ÑемейÑÑваÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑего ÑемейÑÑва опеÑаÑоÑов, в коÑоÑое бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ ÑÑÐ¾Ñ ÐºÐ»Ð°ÑÑ. ÐÑли не Ñказано, подÑазÑмеваеÑÑÑ ÑемейÑÑво Ñ Ñем же именем, ÑÑо и клаÑÑ (еÑли Ñакое ÑемейÑÑво не ÑÑÑеÑÑвÑеÑ, оно ÑоздаÑÑÑÑ).
номеÑ_ÑÑÑаÑегииÐÐ¾Ð¼ÐµÑ ÑÑÑаÑегии индекÑного меÑода Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа, ÑвÑзанного Ñ Ð´Ð°Ð½Ð½Ñм клаÑÑом опеÑаÑоÑов.
имÑ_опеÑаÑоÑаÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) опеÑаÑоÑа, ÑвÑзанного Ñ Ð´Ð°Ð½Ð½Ñм клаÑÑом опеÑаÑоÑов.
Ñип_опеÑандаРпÑедложении
OPERATORÑÑо Ñип даннÑÑ Ð¾Ð¿ÐµÑанда, либо клÑÑевое ÑловоNONE, Ñ Ð°ÑакÑеÑизÑÑÑее левÑй ÑнаÑнÑй или пÑавÑй ÑнаÑнÑй опеÑаÑоÑ. Ð¢Ð¸Ð¿Ñ Ð¾Ð¿ÐµÑандов обÑÑно можно опÑÑÑиÑÑ, когда они ÑовпадаÑÑ Ñ Ñипом даннÑÑ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов.РпÑедложении
FUNCTIONÑÑо Ñип даннÑÑ Ð¾Ð¿ÐµÑанда, коÑоÑÑй должна поддеÑживаÑÑ ÑÑа ÑÑнкÑиÑ, еÑли он оÑлиÑаеÑÑÑ Ð¾Ñ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñипа даннÑÑ ÑÑнкÑии (Ð´Ð»Ñ ÑÑнкÑий ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð² B-деÑевÑÑÑ Ð¸ Ñ ÐµÑ-ÑÑнкÑий) или Ñипа даннÑÑ ÐºÐ»Ð°ÑÑа (Ð´Ð»Ñ ÑÑнкÑий поддеÑжки ÑоÑÑиÑовки в B-деÑевÑÑÑ Ð¸ вÑÐµÑ ÑÑнкÑий в клаÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑов GiST, SP-GiST, GIN и BRIN). ÐбÑÑно пÑедполагаемÑе по ÑмолÑÐ°Ð½Ð¸Ñ ÑÐ¸Ð¿Ñ Ð¾ÐºÐ°Ð·ÑваÑÑÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑими, Ñак ÑÑоÑип_опеÑандаÑказÑваÑÑ Ð²FUNCTIONне нÑжно (еÑли ÑÑо не ÑÑнкÑии ÑоÑÑиÑовки B-деÑева, коÑоÑÑе пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑазнÑÑ Ñипов даннÑÑ ).ÑемейÑÑво_ÑоÑÑиÑовкиÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑÑеÑÑвÑÑÑего ÑемейÑÑва опеÑаÑоÑов
btree, опиÑÑваÑÑего поÑÑдок ÑоÑÑиÑовки, ÑвÑзаннÑй Ñ Ð¾Ð¿ÐµÑаÑоÑом ÑоÑÑиÑовки.ÐÑли не Ñказано ни
FOR SEARCH(Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка), ниFOR ORDER BY(Ð´Ð»Ñ ÑоÑÑиÑовки), подÑазÑмеваеÑÑÑFOR SEARCH.номеÑ_опоÑной_ÑÑнкÑииÐÐ¾Ð¼ÐµÑ Ð¾Ð¿Ð¾Ñной ÑÑнкÑии индекÑного меÑода Ð´Ð»Ñ ÑÑнкÑии, ÑвÑзанной Ñ Ð´Ð°Ð½Ð½Ñм клаÑÑом опеÑаÑоÑов.
имÑ_ÑÑнкÑииÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑнкÑии, коÑоÑÐ°Ñ ÑвлÑеÑÑÑ Ð¾Ð¿Ð¾Ñной ÑÑнкÑией индекÑного меÑода Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ клаÑÑа опеÑаÑоÑов.
Ñип_аÑгÑменÑаТип даннÑÑ Ð¿Ð°ÑамеÑÑа ÑÑнкÑии.
Ñип_Ñ ÑанениÑТип даннÑÑ , ÑакÑиÑеÑки ÑÐ¾Ñ ÑанÑемÑÑ Ð² индекÑе. ÐбÑÑно ÑÑо Ñип даннÑÑ ÑÑолбÑа, но некоÑоÑÑе меÑÐ¾Ð´Ñ Ð¸Ð½Ð´ÐµÐºÑа (в наÑÑоÑÑее вÑемÑ, GiST, GIN и BRIN) могÑÑ ÑабоÑаÑÑ Ñ Ð¾ÑлиÑнÑм Ð¾Ñ Ð½ÐµÐ³Ð¾ Ñипом. ÐÑедложение
STORAGEÐ¼Ð¾Ð¶ÐµÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ, ÑолÑко еÑли меÑод индекÑа позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð´ÑÑгой Ñип даннÑÑ . ÐÑлиÑип_даннÑÑÑÑолбÑа задан какanyarray,Ñип_Ñ ÑанениÑÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвлен какanyelement, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ, ÑÑо запиÑи в индекÑе ÑвлÑÑÑÑÑ Ñленами Ñипа ÑлеменÑа, пÑинадлежаÑего к ÑакÑиÑеÑÐºÐ¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð¼Ð°ÑÑива, Ð´Ð»Ñ ÐºÐ¾ÑоÑого ÑоздаÑÑÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑй индекÑ.
ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ OPERATOR, FUNCTION и STORAGE могÑÑ ÑказÑваÑÑÑÑ Ð² лÑбом поÑÑдке.
ÐамеÑаниÑ
Так как Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑов не пÑовеÑÑÑÑ Ð¿Ñава доÑÑÑпа к ÑÑнкÑиÑм, пÑежде Ñем вÑзÑваÑÑ Ð¸Ñ , вклÑÑение ÑÑнкÑий или опеÑаÑоÑов в клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов по ÑÑÑи даÑÑ Ð²Ñем пÑаво на вÑполнение Ð¸Ñ . ÐбÑÑно ÑÑо не пÑоблема Ð´Ð»Ñ ÑÐ°ÐºÐ¸Ñ ÑÑнкÑий, какие бÑваÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð² клаÑÑе опеÑаÑоÑов.
ÐпеÑаÑоÑÑ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑеализовÑваÑÑÑÑ Ð² ÑÑнкÑиÑÑ Ð½Ð° ÑзÑке SQL. SQL-ÑÑнкÑÐ¸Ñ Ð²ÐµÑоÑÑнее вÑего бÑÐ´ÐµÑ Ð²ÑÑÑоена в вÑзÑваÑÑий запÑоÑ, ÑÑо помеÑÐ°ÐµÑ Ð¾Ð¿ÑимизаÑоÑÑ Ð¿Ð¾Ð½ÑÑÑ, ÑÑо ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑÑ.
Ðо PostgreSQL 8.4 пÑедложение OPERATOR могло вклÑÑаÑÑ Ñказание RECHECK. ТепеÑÑ ÑÑо не поддеÑживаеÑÑÑ, Ñак как опеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Â«Ð½ÐµÑоÑнÑм» и ÑÑо опÑеделÑеÑÑÑ Ð½Ð° Ñ
Ð¾Ð´Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑполнениÑ. ÐÑо позволÑÐµÑ ÑÑÑекÑивно ÑпÑавлÑÑÑÑÑ Ñ ÑиÑÑаÑиÑми, когда опеÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð»Ð¸ не бÑÑÑ Ð½ÐµÑоÑнÑм.
ÐÑимеÑÑ
Ðоманда в ÑледÑÑÑем пÑимеÑе опÑеделÑÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ð¿ÐµÑаÑоÑов индекÑа GiST Ð´Ð»Ñ Ñипа даннÑÑ
_int4 (маÑÑива из int4). ÐолнÑй пÑÐ¸Ð¼ÐµÑ Ð¿ÑиведÑн в модÑле intarray.
CREATE OPERATOR CLASS gist__int_ops
DEFAULT FOR TYPE _int4 USING gist AS
OPERATOR 3 &&,
OPERATOR 6 = (anyarray, anyarray),
OPERATOR 7 @>,
OPERATOR 8 <@,
OPERATOR 20 @@ (_int4, query_int),
FUNCTION 1 g_int_consistent (internal, _int4, smallint, oid, internal),
FUNCTION 2 g_int_union (internal, internal),
FUNCTION 3 g_int_compress (internal),
FUNCTION 4 g_int_decompress (internal),
FUNCTION 5 g_int_penalty (internal, internal, internal),
FUNCTION 6 g_int_picksplit (internal, internal),
FUNCTION 7 g_int_same (_int4, _int4, internal);СовмеÑÑимоÑÑÑ
CREATE OPERATOR CLASS ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro. Ðоманда CREATE OPERATOR CLASS оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.