ALTER OPERATOR FAMILY
ALTER OPERATOR FAMILY â измениÑÑ Ð¾Ð¿Ñеделение ÑемейÑÑва опеÑаÑоÑов
СинÑакÑиÑ
ALTER OPERATOR FAMILYимÑUSINGиндекÑнÑй_меÑодADD { OPERATORномеÑ_ÑÑÑаÑегииимÑ_опеÑаÑоÑа(Ñип_опеÑанда,Ñип_опеÑанда) [ FOR SEARCH | FOR ORDER BYÑемейÑÑво_ÑоÑÑиÑовки] | FUNCTIONномеÑ_опоÑной_ÑÑнкÑии[ (Ñип_опеÑанда[ ,Ñип_опеÑанда] ) ]имÑ_ÑÑнкÑии[ (Ñип_аÑгÑменÑа[, ...] ) ] } [, ... ] ALTER OPERATOR FAMILYимÑUSINGиндекÑнÑй_меÑодDROP { OPERATORномеÑ_ÑÑÑаÑегии(Ñип_опеÑанда[ ,Ñип_опеÑанда] ) | FUNCTIONномеÑ_опоÑной_ÑÑнкÑии(Ñип_опеÑанда[ ,Ñип_опеÑанда] ) } [, ... ] ALTER OPERATOR FAMILYимÑUSINGиндекÑнÑй_меÑодRENAME TOновое_имÑALTER OPERATOR FAMILYимÑUSINGиндекÑнÑй_меÑодOWNER TO {новÑй_владелеÑ| CURRENT_USER | SESSION_USER } ALTER OPERATOR FAMILYимÑUSINGиндекÑнÑй_меÑодSET SCHEMAноваÑ_ÑÑ ÐµÐ¼Ð°
ÐпиÑание
ALTER OPERATOR FAMILY менÑÐµÑ Ð¾Ð¿Ñеделение ÑемейÑÑва опеÑаÑоÑов. Ðна позволÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð² ÑемейÑÑво опеÑаÑоÑÑ Ð¸ опоÑнÑе ÑÑнкÑии, ÑдалÑÑÑ Ð¸Ñ
из ÑемейÑÑва или менÑÑÑ Ð¸Ð¼Ñ Ð¸ владелÑÑа ÑемейÑÑва опеÑаÑоÑов.
Ðогда опеÑаÑоÑÑ Ð¸ опоÑнÑе ÑÑнкÑии добавлÑÑÑÑÑ Ð² ÑемейÑÑво Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ALTER OPERATOR FAMILY, они не ÑÑановÑÑÑÑ ÑаÑÑÑÑ ÐºÐ°ÐºÐ¾Ð³Ð¾-либо опÑеделÑнного клаÑÑа опеÑаÑоÑов в ÑемейÑÑве, а пÑоÑÑо ÑÑиÑаÑÑÑÑ Â«ÑлабоÑвÑзаннÑми» Ñ ÑемейÑÑвом. ÐÑо показÑваеÑ, ÑÑо ÑÑи опеÑаÑоÑÑ Ð¸ ÑÑнкÑии ÑеманÑиÑеÑки ÑовмеÑÑÐ¸Ð¼Ñ Ñ ÑемейÑÑвом, но не ÑÑебÑÑÑÑÑ Ð´Ð»Ñ ÐºÐ¾ÑÑекÑной ÑабоÑÑ ÐºÐ°ÐºÐ¾Ð³Ð¾-либо индекÑа. (ÐпеÑаÑоÑÑ Ð¸ ÑÑнкÑии, коÑоÑÑе дейÑÑвиÑелÑно ÑÑебÑÑÑÑÑ Ð´Ð»Ñ ÑÑого, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ð½Ðµ в ÑемейÑÑво, а в клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов; Ñм. CREATE OPERATOR CLASS.) Postgres Pro позволÑÐµÑ ÑдалÑÑÑ ÑлабоÑвÑзаннÑе ÑÐ»ÐµÐ½Ñ Ð¸Ð· ÑемейÑÑва в лÑбое вÑемÑ, но ÑÐ»ÐµÐ½Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов не могÑÑ Ð±ÑÑÑ ÑдаленÑ, пока не бÑÐ´ÐµÑ ÑдалÑн веÑÑ ÐºÐ»Ð°ÑÑ Ð¸ вÑе завиÑимÑе Ð¾Ñ Ð½ÐµÐ³Ð¾ индекÑÑ. ÐбÑÑно в клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов вклÑÑаÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ Ð¸ ÑÑнкÑии, ÑабоÑаÑÑие Ñ Ð¾Ð´Ð½Ð¸Ð¼ Ñипом даннÑм (Ñак как они нÑÐ¶Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки индекÑов даннÑÑ
Ñакого Ñипа), а межÑиповÑе ÑÑнкÑии и опеÑаÑоÑÑ ÑÑановÑÑÑÑ ÑлабоÑвÑзаннÑми Ñленами ÑемейÑÑва.
ÐÑполниÑÑ ALTER OPERATOR FAMILY Ð¼Ð¾Ð¶ÐµÑ ÑолÑко ÑÑпеÑполÑзоваÑелÑ. (ÐÑо огÑаниÑение введено поÑомÑ, ÑÑо оÑибоÑное опÑеделение ÑемейÑÑва опеÑаÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð½Ð°ÑÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ даже Ñбой в ÑабоÑе ÑеÑвеÑа.)
ALTER OPERATOR FAMILY в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ пÑовеÑÑеÑ, вклÑÑÐ°ÐµÑ Ð»Ð¸ опÑеделение ÑемейÑÑва опеÑаÑоÑов вÑе опеÑаÑоÑÑ Ð¸ ÑÑнкÑии, ÑÑебÑемÑе Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑного меÑода, и обÑазÑÑÑ Ð»Ð¸ они ÑелоÑÑнÑй набоÑ. ÐÑвеÑÑÑвенноÑÑÑ Ð·Ð° пÑавилÑноÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑемейÑÑва Ð»ÐµÐ¶Ð¸Ñ Ð½Ð° полÑзоваÑеле.
Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 36.16.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑего ÑемейÑÑва опеÑаÑоÑов (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
индекÑнÑй_меÑодÐÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑного меÑода, Ð´Ð»Ñ ÐºÐ¾ÑоÑого пÑедназнаÑено ÑÑо ÑемейÑÑво опеÑаÑоÑов.
номеÑ_ÑÑÑаÑегииÐÐ¾Ð¼ÐµÑ ÑÑÑаÑегии индекÑного меÑода Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа, ÑвÑзанного Ñ Ð´Ð°Ð½Ð½Ñм ÑемейÑÑвом опеÑаÑоÑов.
имÑ_опеÑаÑоÑаÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) опеÑаÑоÑа, ÑвÑзанного Ñ Ð´Ð°Ð½Ð½Ñм ÑемейÑÑвом опеÑаÑоÑов.
Ñип_опеÑандаРпÑедложении
OPERATORÑказÑваеÑÑÑ Ñип(Ñ) даннÑÑ Ð¾Ð¿ÐµÑаÑоÑа илиNONE, еÑли ÑÑо левÑй или пÑавÑй ÑнаÑнÑй опеÑаÑоÑ. РоÑлиÑие Ð¾Ñ Ð¿Ð¾Ñ Ð¾Ð¶ÐµÐ³Ð¾ ÑинÑакÑиÑа вCREATE OPERATOR CLASS, здеÑÑ ÑÐ¸Ð¿Ñ Ð¾Ð¿ÐµÑандов Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказÑваÑÑÑÑ Ð²Ñегда.РпÑедложении
ADD FUNCTIONÑÑо Ñип даннÑÑ , коÑоÑÑй должна поддеÑживаÑÑ ÑÑа ÑÑнкÑиÑ, еÑли он оÑлиÑаеÑÑÑ Ð¾Ñ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñипа даннÑÑ ÑÑнкÑии. ÐÐ»Ñ ÑÑнкÑий ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ B-деÑевÑев и Ñ ÐµÑ-ÑÑнкÑий ÑказÑваÑÑÑип_опеÑанданеобÑзаÑелÑно, Ñак как Ð¸Ñ Ð²Ñ Ð¾Ð´Ð½Ñе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²Ñегда бÑдÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑими. Ðднако Ð´Ð»Ñ Ð¾Ð¿Ð¾ÑнÑÑ ÑÑнкÑий ÑоÑÑиÑовки и ÑÑнкÑий ÑавенÑÑва обÑазов в B-деÑевÑÑÑ Ð¸ вÑÐµÑ ÑÑнкÑий в клаÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑов GiST, SP-GiST и GIN Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказаÑÑ Ñип(Ñ) опеÑандов, Ñ ÐºÐ¾ÑоÑÑми бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÑÑи ÑÑнкÑии.РпÑедложении
DROP FUNCTIONÑип опеÑанда, коÑоÑÑй должна поддеÑживаÑÑ ÑÑа ÑÑнкÑиÑ.ÑемейÑÑво_ÑоÑÑиÑовкиÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑÑеÑÑвÑÑÑего ÑемейÑÑва опеÑаÑоÑов
btree, опиÑÑваÑÑего поÑÑдок ÑоÑÑиÑовки, ÑвÑзаннÑй Ñ Ð¾Ð¿ÐµÑаÑоÑом ÑоÑÑиÑовки.ÐÑли не Ñказано ни
FOR SEARCH(Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка), ниFOR ORDER BY(Ð´Ð»Ñ ÑоÑÑиÑовки), подÑазÑмеваеÑÑÑFOR SEARCH.номеÑ_опоÑной_ÑÑнкÑииÐÐ¾Ð¼ÐµÑ Ð¾Ð¿Ð¾Ñной ÑÑнкÑии индекÑного меÑода Ð´Ð»Ñ ÑÑнкÑии, ÑвÑзанной Ñ Ð´Ð°Ð½Ð½Ñм ÑемейÑÑвом опеÑаÑоÑов.
имÑ_ÑÑнкÑииÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑнкÑии, коÑоÑÐ°Ñ ÑвлÑеÑÑÑ Ð¾Ð¿Ð¾Ñной ÑÑнкÑией индекÑного меÑода Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑемейÑÑва опеÑаÑоÑов. ÐÑли ÑпиÑок аÑгÑменÑов оÑÑÑÑÑÑвÑеÑ, Ð¸Ð¼Ñ ÑÑнкÑии должно бÑÑÑ ÑникалÑнÑм в ÐµÑ ÑÑ ÐµÐ¼Ðµ.
Ñип_аÑгÑменÑаТип даннÑÑ Ð¿Ð°ÑамеÑÑа ÑÑнкÑии.
новое_имÑÐовое Ð¸Ð¼Ñ ÑемейÑÑва опеÑаÑоÑов.
новÑй_владелеÑÐовÑй Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑемейÑÑва опеÑаÑоÑов.
новаÑ_ÑÑ ÐµÐ¼Ð°ÐÐ¾Ð²Ð°Ñ ÑÑ ÐµÐ¼Ð° ÑемейÑÑва опеÑаÑоÑов.
ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ OPERATOR и FUNCTION могÑÑ ÑказÑваÑÑÑÑ Ð² лÑбом поÑÑдке.
ÐÑимеÑаниÑ
ÐамеÑÑÑе, ÑÑо в ÑинÑакÑиÑе DROP ÑказÑваеÑÑÑ ÑолÑко «ÑлоÑ» в ÑемейÑÑве опеÑаÑоÑов, по номеÑÑ ÑÑÑаÑегии или опоÑной ÑÑнкÑии, и вÑ
однÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÐ¼Ñ Ð¾Ð¿ÐµÑаÑоÑа или ÑÑнкÑии, занимаÑÑиÑ
ÑÑÐ¾Ñ ÑлоÑ, не ÑпоминаеÑÑÑ. Также ÑÑÑиÑе, ÑÑо в DROP FUNCTION ÑказÑваÑÑÑÑ ÑÐ¸Ð¿Ñ Ð²Ñ
однÑÑ
даннÑÑ
, коÑоÑÑе должна поддеÑживаÑÑ ÑÑнкÑиÑ, но Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов GiST, SP-GiST и GIN они могÑÑ Ð½Ðµ имеÑÑ Ð½Ð¸Ñего обÑего Ñ Ñипами ÑакÑиÑеÑкиÑ
аÑгÑменÑов ÑÑнкÑии.
Так как Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑов не пÑовеÑÑÑÑ Ð¿Ñава доÑÑÑпа к ÑÑнкÑиÑм пÑежде Ñем вÑзÑваÑÑ Ð¸Ñ , вклÑÑение ÑÑнкÑий или опеÑаÑоÑов в ÑемейÑÑво опеÑаÑоÑов по ÑÑÑи даÑÑ Ð²Ñем пÑаво на вÑполнение Ð¸Ñ . ÐбÑÑно ÑÑо не пÑоблема Ð´Ð»Ñ ÑÐ°ÐºÐ¸Ñ ÑÑнкÑий, какие бÑваÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð² ÑемейÑÑве опеÑаÑоÑов.
ÐпеÑаÑоÑÑ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑеализовÑваÑÑÑÑ Ð² ÑÑнкÑиÑÑ Ð½Ð° ÑзÑке SQL. SQL-ÑÑнкÑÐ¸Ñ Ð²ÐµÑоÑÑнее вÑего бÑÐ´ÐµÑ Ð²ÑÑÑоена в вÑзÑваÑÑий запÑоÑ, ÑÑо помеÑÐ°ÐµÑ Ð¾Ð¿ÑимизаÑоÑÑ Ð¿Ð¾Ð½ÑÑÑ, ÑÑо ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑÑ.
Ðо PostgreSQL 8.4 пÑедложение OPERATOR могло вклÑÑаÑÑ Ñказание RECHECK. ТепеÑÑ ÑÑо не поддеÑживаеÑÑÑ, Ñак как опеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Â«Ð½ÐµÑоÑнÑм» и ÑÑо опÑеделÑеÑÑÑ Ð½Ð° Ñ
Ð¾Ð´Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑполнениÑ. ÐÑо позволÑÐµÑ ÑÑÑекÑивно ÑпÑавлÑÑÑÑÑ Ñ ÑиÑÑаÑиÑми, когда опеÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð»Ð¸ не бÑÑÑ Ð½ÐµÑоÑнÑм.
ÐÑимеÑÑ
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð¾Ð¿Ð¾ÑнÑе ÑÑнкÑии и межÑиповÑе опеÑаÑоÑÑ Ð² ÑемейÑÑво опеÑаÑоÑов, Ñже ÑодеÑжаÑее клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов B-деÑева Ð´Ð»Ñ Ñипов даннÑÑ
int4 и int2.
ALTER OPERATOR FAMILY integer_ops USING btree ADD -- int4 и int2 OPERATOR 1 < (int4, int2) , OPERATOR 2 <= (int4, int2) , OPERATOR 3 = (int4, int2) , OPERATOR 4 >= (int4, int2) , OPERATOR 5 > (int4, int2) , FUNCTION 1 btint42cmp(int4, int2) , -- int2 и int4 OPERATOR 1 < (int2, int4) , OPERATOR 2 <= (int2, int4) , OPERATOR 3 = (int2, int4) , OPERATOR 4 >= (int2, int4) , OPERATOR 5 > (int2, int4) , FUNCTION 1 btint24cmp(int2, int4) ;
Удаление ÑÑÐ¸Ñ Ð¶Ðµ ÑлеменÑов:
ALTER OPERATOR FAMILY integer_ops USING btree DROP -- int4 vs int2 OPERATOR 1 (int4, int2) , OPERATOR 2 (int4, int2) , OPERATOR 3 (int4, int2) , OPERATOR 4 (int4, int2) , OPERATOR 5 (int4, int2) , FUNCTION 1 (int4, int2) , -- int2 vs int4 OPERATOR 1 (int2, int4) , OPERATOR 2 (int2, int4) , OPERATOR 3 (int2, int4) , OPERATOR 4 (int2, int4) , OPERATOR 5 (int2, int4) , FUNCTION 1 (int2, int4) ;
СовмеÑÑимоÑÑÑ
Ðоманда ALTER OPERATOR FAMILY оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.