ALTER INDEX
ALTER INDEX â измениÑÑ Ð¾Ð¿Ñеделение индекÑа
СинÑакÑиÑ
ALTER INDEX [ IF EXISTS ]имÑRENAME TOновое_имÑALTER INDEX [ IF EXISTS ]имÑSET TABLESPACEÑабл_пÑоÑÑÑанÑÑвоALTER INDEXимÑATTACH PARTITIONимÑ_индекÑаALTER INDEXимÑDEPENDS ON EXTENSIONимÑ_ÑаÑÑиÑениÑALTER INDEX [ IF EXISTS ]имÑSET (паÑамеÑÑ_Ñ ÑанениÑ[=знаÑение] [, ... ] ) ALTER INDEX [ IF EXISTS ]имÑRESET (паÑамеÑÑ_Ñ ÑанениÑ[, ... ] ) ALTER INDEX [ IF EXISTS ]имÑALTER [ COLUMN ]номеÑ_ÑÑолбÑаSET STATISTICSintegerALTER INDEX ALL IN TABLESPACEимÑ[ OWNED BYимÑ_Ñоли[, ... ] ] SET TABLESPACEновое_Ñабл_пÑоÑÑÑанÑÑво[ NOWAIT ]
ÐпиÑание
ALTER INDEX менÑÐµÑ Ð¾Ð¿Ñеделение ÑÑÑеÑÑвÑÑÑего индекÑа. ÐеÑколÑко ÐµÑ ÑазновидноÑÑей опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ. ÐамеÑÑÑе, ÑÑо Ð´Ð»Ñ ÑазнÑÑ
ÑазновидноÑÑей могÑÑ ÑÑебоваÑÑÑÑ ÑазнÑе ÑÑовни блокиÑовок. ÐÑли Ñвно не оÑмеÑено дÑÑгое, ÑÑебÑеÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка ACCESS EXCLUSIVE. ÐÑи пеÑеÑиÑлении неÑколÑкиÑ
подкоманд бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑаÑиваÑÑÑÑ ÑÐ°Ð¼Ð°Ñ ÑилÑÐ½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовка из ÑÑебÑемÑÑ
ими.
RENAMEФоÑма
RENAMEменÑÐµÑ Ð¸Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑа. ÐÑли ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ ÑвÑзан Ñ Ð¾Ð³ÑаниÑением ÑаблиÑÑ (UNIQUE,PRIMARY KEYилиEXCLUDE), ÑÑо огÑаниÑение Ñоже пеÑеименовÑваеÑÑÑ. Ðа ÑÐ¾Ñ ÑанÑннÑе даннÑе ÑÑо не влиÑеÑ.ÐÐ»Ñ Ð¿ÐµÑÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ÑÑебÑеÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка
SHARE UPDATE EXCLUSIVE.SET TABLESPACEÐÑа ÑоÑма менÑÐµÑ ÑаблиÑное пÑоÑÑÑанÑÑво индекÑа на заданное и пеÑеноÑÐ¸Ñ Ð² него Ñайл(Ñ) даннÑÑ , ÑвÑзаннÑе Ñ Ð¸Ð½Ð´ÐµÐºÑом. ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑаблиÑного пÑоÑÑÑанÑÑва индекÑа нÑжно бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем индекÑа и имеÑÑ Ð¿Ñаво
CREATEв новом ÑаблиÑном пÑоÑÑÑанÑÑве. ФоÑмаALL IN TABLESPACEпозволÑÐµÑ Ð¿ÐµÑенеÑÑи из заданного пÑоÑÑÑанÑÑва вÑе индекÑÑ Ð² ÑекÑÑей базе даннÑÑ , блокиÑÑÑ Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑемеÑÐµÐ½Ð¸Ñ Ð¸ заÑем пеÑемеÑÐ°Ñ ÐºÐ°Ð¶Ð´Ñй индекÑ. ÐÑа ÑоÑма Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑказаниеOWNED BY, Ñ ÐºÐ¾ÑоÑÑм бÑдÑÑ Ð¿ÐµÑемеÑÐµÐ½Ñ ÑолÑко индекÑÑ, пÑинадлежаÑие заданнÑм ÑолÑм. ÐÑли Ñказан паÑамеÑÑNOWAIT, команда завеÑÑиÑÑÑ Ð¾Ñибкой, еÑли не ÑÐ¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ полÑÑиÑÑ Ð²Ñе ÑÑебÑемÑе блокиÑовки. ÐамеÑÑÑе, ÑÑо ÑÑа команда не пеÑемеÑÑÐ¸Ñ ÑиÑÑемнÑе каÑалоги; вмеÑÑо Ð½ÐµÑ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑALTER DATABASEили ÑвнÑе вÑзовÑALTER INDEX. См. Ñакже CREATE TABLESPACE.ATTACH PARTITIONимÑ_индекÑаÐÑа ÑоÑма пÑиÑоединÑÐµÑ ÑказаннÑй Ð¸Ð½Ð´ÐµÐºÑ (возможно, дополненнÑй ÑÑ ÐµÐ¼Ð¾Ð¹) к изменÑемомÑ. УказаннÑй Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ оÑноÑиÑÑÑÑ Ðº ÑекÑии ÑаблиÑÑ, ÑодеÑжаÑей изменÑемÑй индекÑ, и имеÑÑ Ñакое же опÑеделение. ÐÑиÑоединÑннÑй Ð¸Ð½Ð´ÐµÐºÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдалÑн незавиÑимо, но бÑÐ´ÐµÑ ÑдалÑн авÑомаÑиÑеÑки пÑи Ñдалении ÑодиÑелÑÑкого индекÑа.
DEPENDS ON EXTENSIONÐÑа ÑоÑма помеÑÐ°ÐµÑ Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ°Ðº завиÑимÑй Ð¾Ñ ÑаÑÑиÑениÑ, Ñак ÑÑо пÑи Ñдалении ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑдалÑн и индекÑ.
SET (паÑамеÑÑ_Ñ ÑанениÑ[=знаÑение] [, ... ] )ÐÑа ÑоÑма наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко ÑпеÑиÑиÑнÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа паÑамеÑÑов Ñ ÑанениÑ. СпиÑок доÑÑÑпнÑÑ Ð¿Ð°ÑамеÑÑов пÑиведÑн в CREATE INDEX. ÐамеÑÑÑе, ÑÑо ÑÑа команда не менÑÐµÑ ÑодеÑжимое индекÑа немедленно; Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑÑÑекÑа в завиÑимоÑÑи Ð¾Ñ Ð¿Ð°ÑамеÑÑов Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿ÐµÑеÑÑÑоиÑÑ Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ REINDEX.
RESET (паÑамеÑÑ_Ñ ÑанениÑ[, ... ] )ÐÑа ÑоÑма ÑбÑаÑÑÐ²Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко ÑпеÑиÑиÑнÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа паÑамеÑÑов Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ðº знаÑениÑм по ÑмолÑаниÑ. Ðак и Ñ
SET, Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð²ÑполниÑÑREINDEX.ALTER [ COLUMN ]номеÑ_ÑÑолбÑаSET STATISTICSintegerÐÑа ÑоÑма задаÑÑ Ð¾ÑиенÑÐ¸Ñ ÑбоÑа ÑÑаÑиÑÑики по ÑÑолбÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑий ANALYZE, Ñ Ð¾ÑÑ ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ ÑолÑко Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑиÑÑемÑÑ ÑÑолбÑов, заданнÑÑ Ð² виде вÑÑажений. Так как Ñ Ð²ÑÑажений Ð½ÐµÑ ÑникалÑнÑÑ Ð¸Ð¼Ñн, Ð¼Ñ Ð¾Ð±ÑаÑаемÑÑ Ðº ним по поÑÑдковÑм номеÑам ÑÑолбÑов в индекÑе. Ðиапазон допÑÑÑимÑÑ Ð·Ð½Ð°Ñений оÑиенÑиÑа: 0..10000; пÑи -1 пÑименÑеÑÑÑ ÑиÑÑемное знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ (default_statistics_target). Ðа дополниÑелÑнÑми ÑведениÑми об иÑполÑзовании ÑÑаÑиÑÑики планиÑовÑиком запÑоÑов PostgreSQL обÑаÑиÑеÑÑ Ðº РазделÑ 14.2.
ÐаÑамеÑÑÑ
IF EXISTSÐе ÑÑиÑаÑÑ Ð¾Ñибкой, еÑли Ð¸Ð½Ð´ÐµÐºÑ Ð½Ðµ ÑÑÑеÑÑвÑеÑ. Ð ÑÑом ÑлÑÑае бÑÐ´ÐµÑ Ð²Ñдано замеÑание.
номеÑ_ÑÑолбÑаЧиÑло, ÑказÑваÑÑее на Ð½Ð¾Ð¼ÐµÑ ÑÑолбÑа в индекÑе по поÑÑÐ´ÐºÑ (Ñлева напÑаво).
имÑÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑÑеÑÑвÑÑÑего индекÑа, подлежаÑего изменениÑ.
новое_имÑÐовое Ð¸Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑа.
Ñабл_пÑоÑÑÑанÑÑвоТаблиÑное пÑоÑÑÑанÑÑво, в коÑоÑое бÑÐ´ÐµÑ Ð¿ÐµÑемеÑÑн индекÑ.
имÑ_ÑаÑÑиÑениÑÐÐ¼Ñ ÑаÑÑиÑениÑ, Ð¾Ñ ÐºÐ¾ÑоÑого бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¸Ð½Ð´ÐµÐºÑ.
паÑамеÑÑ_Ñ ÑанениÑÐÐ¼Ñ ÑпеÑиÑиÑного Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа паÑамеÑÑа Ñ ÑанениÑ.
знаÑениеÐовое знаÑение ÑпеÑиÑиÑного Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа паÑамеÑÑа Ñ ÑанениÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑиÑло или ÑÑÑока, в завиÑимоÑÑи Ð¾Ñ Ð¿Ð°ÑамеÑÑа.
ÐÑимеÑаниÑ
ÐÑи опеÑаÑии Ñакже возможно вÑполниÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ALTER TABLE. Ðа Ñамом деле ALTER INDEX ÂÂÂâ ÑÑо пÑоÑÑо Ñиноним неÑколÑкиÑ
ÑоÑм ALTER TABLE, ÑабоÑаÑÑиÑ
Ñ Ð¸Ð½Ð´ÐµÐºÑами.
Ранее ÑÑÑеÑÑвовала ÑоÑма ALTER INDEX OWNER, но ÑейÑÐ°Ñ Ð¾Ð½Ð° игноÑиÑÑеÑÑÑ (Ñ Ð¿ÑедÑпÑеждением). ÐладелÑÑем индекÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑооÑвеÑÑÑвÑÑÑей ÑаблиÑÑ. ÐÑи Ñмене владелÑÑа ÑаблиÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¸Ð½Ð´ÐµÐºÑа менÑеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки.
Ðакие-либо Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑов ÑиÑÑемного каÑалога не допÑÑкаÑÑÑÑ.
ÐÑимеÑÑ
ÐеÑеименование ÑÑÑеÑÑвÑÑÑего индекÑа:
ALTER INDEX distributors RENAME TO suppliers;
ÐеÑемеÑение индекÑа в дÑÑгое ÑаблиÑное пÑоÑÑÑанÑÑво:
ALTER INDEX distributors SET TABLESPACE fasttablespace;
Ðзменение ÑакÑоÑа Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа (пÑедполагаеÑÑÑ, ÑÑо ÑÑо поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¼ÐµÑод индекÑа):
ALTER INDEX distributors SET (fillfactor = 75); REINDEX INDEX distributors;
УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¾ÑиенÑÐ¸Ñ ÑбоÑа ÑÑаÑиÑÑики Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа по вÑÑажениÑ:
CREATE INDEX coord_idx ON measured (x, y, (z + t)); ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;
СовмеÑÑимоÑÑÑ
ALTER INDEX ÑвлÑеÑÑÑ ÑаÑÑиÑением PostgreSQL.