Skip to content

Создание индексов в CONCURRENTLY режиме + доп.контроль #138

@sgrinko

Description

@sgrinko

Уважаемые разраюботчики,

сейчас для этого случая сроится очень даже хороший код.
Есть предложение встроить доп.контроль на валидность созданного индекса
сейчас:

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;

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions