REINDEX
REINDEX â пеÑеÑÑÑоиÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ
СинÑакÑиÑ
REINDEX [ ( VERBOSE ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } имÑÐпиÑание
REINDEX пеÑеÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð¸Ð½Ð´ÐµÐºÑ, обÑабаÑÑÐ²Ð°Ñ Ð´Ð°Ð½Ð½Ñе ÑаблиÑÑ, к коÑоÑой оÑноÑиÑÑÑ Ð¸Ð½Ð´ÐµÐºÑ, и в ÑезÑлÑÑаÑе заменÑÐµÑ ÑÑаÑÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа. Ðоманда REINDEX пÑименÑеÑÑÑ Ð² ÑледÑÑÑиÑ
ÑиÑÑаÑиÑÑ
:
ÐÐ½Ð´ÐµÐºÑ Ð±Ñл повÑеждÑн, его ÑодеÑжимое ÑÑало некоÑÑекÑнÑм. ХоÑÑ Ð² ÑеоÑии ÑÑого не должно ÑлÑÑаÑÑÑÑ, на пÑакÑике индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸ÑпоÑÑиÑÑÑÑ Ð¸Ð·-за пÑогÑаммнÑÑ Ð¾Ñибок или аппаÑаÑнÑÑ Ñбоев. Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ
REINDEXÑлÑÐ¶Ð¸Ñ Ð¼ÐµÑодом воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа.ÐÐ½Ð´ÐµÐºÑ ÑÑал «ÑаздÑÑÑм», Ñо еÑÑÑ Ð² нÑм оказалоÑÑ Ð¼Ð½Ð¾Ð³Ð¾ пÑÑÑÑÑ Ð¸Ð»Ð¸ поÑÑи пÑÑÑÑÑ ÑÑÑаниÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ñ B-деÑевÑÑми в Postgres Pro пÑи опÑеделÑннÑÑ , доÑÑаÑоÑно ÑÐµÐ´ÐºÐ¸Ñ ÑÑенаÑиÑÑ Ð¸ÑполÑзованиÑ.
REINDEXдаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑокÑаÑиÑÑ Ð¾Ð±ÑÑм, занимаемÑй индекÑом, запиÑÑÐ²Ð°Ñ Ð½Ð¾Ð²ÑÑ Ð²ÐµÑÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑа без «мÑÑÑвÑÑ Â» ÑÑÑаниÑ. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº РазделÑ 23.2.ÐаÑамеÑÑ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа (напÑимеÑ, ÑакÑÐ¾Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ) бÑл изменÑн, и ÑепеÑÑ ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ ÑÑо изменение вÑÑÑпило в ÑÐ¸Ð»Ñ Ð² полной меÑе.
ÐоÑÑÑоение индекÑа Ñ Ð¿Ð°ÑамеÑÑом
CONCURRENTLYзавеÑÑилоÑÑ Ð¾Ñибкой, в ÑезÑлÑÑаÑе Ñего Ð¸Ð½Ð´ÐµÐºÑ Ð¾ÐºÐ°Ð·Ð°Ð»ÑÑ Â«Ð½ÐµÑабоÑим». Такие индекÑÑ Ð±ÐµÑполезнÑ, но Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ легко пеÑеÑÑÑоиÑÑ, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹REINDEX. Ðднако замеÑÑÑе, ÑÑоREINDEXбÑÐ´ÐµÑ Ð¿ÐµÑеÑÑÑаиваÑÑ Ð¸Ñ Ð² обÑÑном, а не в неблокиÑÑÑÑем Ñежиме. ЧÑÐ¾Ð±Ñ Ð¿ÐµÑеÑÑÑоиÑÑ Ñакой индекÑ, минимизиÑÑÑ Ð²Ð»Ð¸Ñние на пÑоизводÑÑвеннÑÑ ÑÑедÑ, его ÑледÑÐµÑ ÑдалиÑÑ, а заÑем Ñнова вÑполниÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCREATE INDEX CONCURRENTLY.
ÐаÑамеÑÑÑ
INDEXÐеÑеÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ ÑказаннÑй индекÑ.
TABLEÐеÑеÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð²Ñе индекÑÑ Ð² Ñказанной ÑаблиÑе. ÐÑли Ñ ÑаблиÑÑ Ð¸Ð¼ÐµÐµÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ ÑаблиÑа «TOAST», она Ñак же пеÑеиндекÑиÑÑеÑÑÑ.
SCHEMAÐеÑеÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð²Ñе индекÑÑ Ð² Ñказанной ÑÑ ÐµÐ¼Ðµ. ÐÑли ÑаблиÑа в ÑÑой ÑÑ ÐµÐ¼Ðµ Ð¸Ð¼ÐµÐµÑ Ð²ÑоÑиÑнÑÑ ÑаблиÑÑ Â«TOAST», она Ñакже бÑÐ´ÐµÑ Ð¿ÐµÑеиндекÑиÑована. ÐÑи ÑÑом обÑабаÑÑваÑÑÑÑ Ð¸ индекÑÑ Ð² обÑÐ¸Ñ ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ . ÐÑÑ ÑоÑмÑ
REINDEXнелÑÐ·Ñ Ð²ÑполниÑÑ Ð² блоке ÑÑанзакÑии.DATABASEÐеÑеÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð²Ñе индекÑÑ Ð² ÑекÑÑей базе даннÑÑ . ÐÑи ÑÑом обÑабаÑÑваÑÑÑÑ Ñакже индекÑÑ Ð² обÑÐ¸Ñ ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ . ÐÑÑ ÑоÑмÑ
REINDEXнелÑÐ·Ñ Ð²ÑполниÑÑ Ð² блоке ÑÑанзакÑии.SYSTEMÐеÑеÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð²Ñе индекÑÑ Ð² ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÑи ÑÑом обÑабаÑÑваÑÑÑÑ Ñакже индекÑÑ Ð² обÑÐ¸Ñ ÑиÑÑемнÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ , но индекÑÑ Ð² ÑаблиÑÐ°Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð½Ðµ заÑÑагиваÑÑÑÑ. ÐÑÑ ÑоÑмÑ
REINDEXнелÑÐ·Ñ Ð²ÑполниÑÑ Ð² блоке ÑÑанзакÑии.имÑÐÐ¼Ñ Ð¾Ð¿ÑеделÑнного индекÑа, ÑаблиÑÑ Ð¸Ð»Ð¸ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , подлежаÑÐ¸Ñ Ð¿ÐµÑеиндекÑаÑии. РнаÑÑоÑÑее вÑемÑ
REINDEX DATABASEиREINDEX SYSTEMмогÑÑ Ð¿ÐµÑеиндекÑиÑоваÑÑ ÑолÑко ÑекÑÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ñак ÑÑо Ð¸Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼ÐµÐ½Ð¸ ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .VERBOSEÐÑÐ²Ð¾Ð´Ð¸Ñ Ð¾ÑÑÑÑ Ð¾ пÑогÑеÑÑе поÑле пеÑеиндекÑаÑии каждого индекÑа.
ÐамеÑаниÑ
Ð ÑлÑÑае подозÑений в повÑеждении индекÑа ÑаблиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð»Ð¸ вÑе индекÑÑ ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑеÑÑÑоиÑÑ, иÑполÑзÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ REINDEX INDEX или REINDEX TABLE.
ÐÑÑ ÑÑложнÑеÑÑÑ, еÑли Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð¿Ð¾Ð²ÑеждÑннÑй Ð¸Ð½Ð´ÐµÐºÑ ÑиÑÑемной ÑаблиÑÑ. Ð ÑÑом ÑлÑÑае важно, ÑÑÐ¾Ð±Ñ ÑиÑÑема Ñама не иÑполÑзовала ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ. (Ðа Ñамом деле в ÑакиÑ
ÑлÑÑаÑÑ
вÑ, ÑкоÑее вÑего, ÑÑолкнÑÑеÑÑ Ñ Ð¿Ð°Ð´ÐµÐ½Ð¸ÐµÐ¼ пÑоÑеÑÑов ÑеÑвеÑа в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð·Ð°Ð¿ÑÑка, как Ñаз вÑледÑÑвие иÑпоÑÑеннÑÑ
индекÑов.) ЧÑÐ¾Ð±Ñ Ð½Ð°Ð´Ñжно воÑÑÑановиÑÑ ÑабоÑее ÑоÑÑоÑние, ÑеÑÐ²ÐµÑ ÑледÑÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ñ Ð¿Ð°ÑамеÑÑом -P, коÑоÑÑй оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование индекÑов пÑи поиÑке в ÑиÑÑемнÑÑ
каÑалогаÑ
.
Ðдин из ваÑианÑов ÑделаÑÑ ÑÑо â вÑклÑÑиÑÑ ÑеÑÐ²ÐµÑ Postgres Pro и запÑÑÑиÑÑ ÐµÐ³Ð¾ Ñнова в однополÑзоваÑелÑÑком Ñежиме, Ñ Ð¿Ð°ÑамеÑÑом -P в командной ÑÑÑоке. ÐаÑем можно вÑполниÑÑ REINDEX DATABASE, REINDEX SYSTEM, REINDEX TABLE или REINDEX INDEX, в завиÑимоÑÑи Ð¾Ñ Ñого, ÑÑо Ð²Ñ Ñ
оÑиÑе воÑÑÑановиÑÑ. Ð ÑлÑÑае Ñомнений вÑполниÑе REINDEX SYSTEM, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеÑÑÑоиÑÑ Ð²Ñе ÑиÑÑемнÑе индекÑÑ Ð² базе даннÑÑ
. ÐаÑем завеÑÑиÑе однополÑзоваÑелÑÑкий ÑÐµÐ°Ð½Ñ ÑеÑвеÑа и пеÑезапÑÑÑиÑе ÑеÑÐ²ÐµÑ Ð² обÑÑном Ñежиме. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ñобнее ÑзнаÑÑ, как ÑабоÑаÑÑ Ñ ÑеÑвеÑом в однополÑзоваÑелÑÑком инÑеÑÑейÑе, обÑаÑиÑеÑÑ Ðº ÑпÑавоÑной ÑÑÑаниÑе postgres.
Ðожно Ñак же запÑÑÑиÑÑ Ð¾Ð±ÑÑнÑй ÑкземплÑÑ ÑеÑвеÑа, но добавиÑÑ Ð² паÑамеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки -P. Ð ÑазнÑÑ
клиенÑаÑ
ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑÑÑ Ð¿Ð¾-ÑазномÑ, но во вÑеÑ
клиенÑаÑ
на базе libpq можно ÑÑÑановиÑÑ Ð´Ð»Ñ Ð¿ÐµÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ PGOPTIONS знаÑение -P до запÑÑка клиенÑа. УÑÑиÑе, ÑÑо Ñ
оÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑод не пÑепÑÑÑÑвÑÐµÑ ÑабоÑе дÑÑгиÑ
клиенÑов, вÑÑ Ð¶Ðµ Ð¸Ð¼ÐµÐµÑ ÑмÑÑл не позволÑÑÑ Ð¸Ð¼ подклÑÑаÑÑÑÑ Ðº повÑеждÑнной базе даннÑÑ
до завеÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑановлениÑ.
ÐейÑÑвие REINDEX подобно ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ пеÑеÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа в Ñом ÑмÑÑле, ÑÑо ÑодеÑжимое индекÑа пеÑеÑоздаÑÑÑÑ Ñ Ð½ÑлÑ, но блокиÑовки пÑи ÑÑом ÑÑÑанавливаÑÑÑÑ Ð´ÑÑгие. REINDEX блокиÑÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ, но не ÑÑение ÑодиÑелÑÑкой ÑаблиÑÑ Ð¸Ð½Ð´ÐµÐºÑа. ÐÑа команда Ñакже ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ACCESS EXCLUSIVE Ð´Ð»Ñ Ð¾Ð±ÑабаÑÑваемого индекÑа, ÑÑо блокиÑÑÐµÑ ÑÑение ÑаблиÑÑ, пÑи коÑоÑом задейÑÑвÑеÑÑÑ ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ. DROP INDEX, напÑоÑив, моменÑалÑно ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ACCESS EXCLUSIVE на ÑодиÑелÑÑкÑÑ ÑаблиÑÑ, блокиÑÑÑ Ð¸ запиÑÑ, и ÑÑение. ÐоÑледÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CREATE INDEX блокиÑÑÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ, но не ÑÑение; Ñак как Ð¸Ð½Ð´ÐµÐºÑ Ð¾ÑÑÑÑÑÑвÑеÑ, обÑаÑений к Ð½ÐµÐ¼Ñ Ð½Ð¸ пÑи каком ÑÑении не бÑдеÑ, ÑÑо ознаÑаеÑ, ÑÑо блокиÑоваÑÑÑÑ ÑÑение не бÑдеÑ, но вÑполнÑÑÑÑÑ Ð¾Ð½Ð¾ бÑÐ´ÐµÑ ÐºÐ°Ðº доÑогоÑÑоÑÑее поÑледоваÑелÑное ÑканиÑование.
ÐÐ»Ñ Ð¿ÐµÑеÑÑÑÐ°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ индекÑа или индекÑов ÑаблиÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем ÑÑого индекÑа или ÑаблиÑÑ. ÐÐ»Ñ Ð¿ÐµÑеиндекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ (замеÑÑÑе, ÑÑо он Ð¼Ð¾Ð¶ÐµÑ Ñаким обÑазом пеÑеÑÑÑоиÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ ÑаблиÑ, пÑинадлежаÑÐ¸Ñ Ð´ÑÑгим полÑзоваÑелÑм). РазÑмееÑÑÑ, ÑÑпеÑполÑзоваÑели могÑÑ Ð¿ÐµÑеиндекÑиÑоваÑÑ Ð²ÑÑ Ð±ÐµÐ· огÑаниÑений.
ÐÑимеÑÑ
ÐеÑеÑÑÑоение одного индекÑа:
REINDEX INDEX my_index;
ÐеÑеÑÑÑоение вÑеÑ
индекÑов ÑаблиÑÑ my_table:
REINDEX TABLE my_table;
ÐеÑеÑÑÑоение вÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑов в опÑеделÑнной базе даннÑÑ , в пÑедположении, ÑÑо ÑелоÑÑноÑÑÑ ÑиÑÑемнÑÑ Ð¸Ð½Ð´ÐµÐºÑов под Ñомнением:
$export PGOPTIONS="-P"$psql broken_db... broken_db=> REINDEX DATABASE broken_db; broken_db=> \q
СовмеÑÑимоÑÑÑ
Ðоманда REINDEX оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.