-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Labels
Description
Уважаемые разраюботчики,
сейчас для этого случая сроится очень даже хороший код.
Есть предложение встроить доп.контроль на валидность созданного индекса
сейчас:
CREATE INDEX CONCURRENTLY tmp1052687613_idx_legal_case_status_history_id_legal_case ON bankrupt.legal_case_status_history USING btree (id_legal_case, COALESCE(date_end, date_begin) DESC, id_message DESC NULLS LAST, id_report DESC) INCLUDE (id_legal_case_finalized_reason);
BEGIN TRANSACTION;
DROP INDEX bankrupt.idx_legal_case_status_history_id_legal_case;
ALTER INDEX bankrupt.tmp1052687613_idx_legal_case_status_history_id_legal_case RENAME TO idx_legal_case_status_history_id_legal_case;
COMMIT TRANSACTION;
иногда может быть так, что операция прошла не совсем успешно, т.е. не до конца. Я в неё ни разу не попадал, но в документации сказано, что так может быть.
Неблокирующее перестроение индексов
предлагаю примерно такой код:
CREATE INDEX CONCURRENTLY tmp1052687613_idx_legal_case_status_history_id_legal_case ON bankrupt.legal_case_status_history USING btree (id_legal_case, COALESCE(date_end, date_begin) DESC, id_message DESC NULLS LAST, id_report DESC) INCLUDE (id_legal_case_finalized_reason);
--
DO $$
DECLARE
v_indexname text;
BEGIN
v_indexname = (SELECT c.relname FROM pg_index i INNER JOIN pg_class c ON i.indexrelid = c.oid WHERE NOT indisvalid LIMIT 1); -- In INVALID state
IF v_indexname is not null THEN
RAISE 'In INVALID state - CREATE INDEX CONCURRENTLY %', v_indexname;
END IF;
END; $$
LANGUAGE 'plpgsql';
BEGIN TRANSACTION;
DROP INDEX bankrupt.idx_legal_case_status_history_id_legal_case;
ALTER INDEX bankrupt.tmp1052687613_idx_legal_case_status_history_id_legal_case RENAME TO idx_legal_case_status_history_id_legal_case;
COMMIT TRANSACTION;
Reactions are currently unavailable