18 июля пройдет вебинар "Выживаем с PostgreSQL или новая СУБД для старого Oracle DBA". Приходите, информация и регистрация по ссылке!
Знакомимся с возможностями новой версии Oracle 23c в этой теме.

ATTACH DETACH PARTITION

«Пост-Грэс-Кью-Эл» свободная объектно-реляционная СУБД. Обмениваемся вопросами и ответами о её работе.
Ответить
Аватара пользователя
talifa
Сообщения: 16
Зарегистрирован: Вт июн 21, 2022 4:03 pm

ATTACH DETACH PARTITION

Сообщение talifa »

коллеги, хелп. postgresql 11

есть большая партицированная таблица. добавили партицию, создали индекс ONLY на родительскую таблицу. далее создали индекс на партицию и прицепили родительскому индексу.

Код: Выделить всё

CREATE  INDEX CONCURRENTLY i_audit_messages_sectioned_y2021m07_on_operation_code_id  ON audit_messages_sectioned_y2021m07(operation_code_id);
ALTER INDEX i_audit_messages_sectioned_on_operation_code_id ATTACH PARTITION i_audit_messages_sectioned_y2021m07_on_operation_code_id;
вроде все нормально пока и логично. создали партиций на 50 лет. потом одумались и удалили часть, тормозят запросы.

--- удаляли так, тут без проблем удалилось:

Код: Выделить всё

ALTER TABLE  audit_messages_sectioned DETACH PARTITION  audit_messages_sectioned_y2021m07;
DROP INDEX IF EXISTS i_audit_messages_sectioned_y2021m07_on_operation_code_id;
DROP TABLE audit_messages_sectioned_y2021m07;
---- затем партиция понадобилась снова. создаем так. все нормально создается

Код: Выделить всё

CREATE TABLE IF NOT EXISTS audit_messages_sectioned_y2021m07 PARTITION OF audit_messages_sectioned FOR VALUES FROM ('2021-07-01 00:00:00') TO ('2021-08-01 00:00:00');
CREATE  INDEX CONCURRENTLY i_audit_messages_sectioned_y2021m07_on_operation_code_id  ON audit_messages_sectioned_y2021m07(operation_code_id);
--- пытаемся приаттачить индекс

Код: Выделить всё

ALTER INDEX i_audit_messages_sectioned_on_operation_code_id ATTACH PARTITION i_audit_messages_sectioned_y2021m07_on_operation_code_id;
ERROR:  cannot attach index "i_audit_messages_sectioned_y2021m07_on_operation_code_id" as a partition of index "i_audit_messages_sectioned_on_operation_code_id"
DETAIL:  Another index is already attached for partition "audit_messages_sectioned_y2021m07"
--- то есть он есть, его удаляли, пересоздавали, но он волшебно есть в родительской таблице
--- ну ок, есть и хорошо. смотрим как работает, а работает как-будто его нет

Код: Выделить всё

EXPLAIN select operation_code_id from audit_messages_sectioned_y2021m07 order by operation_code_id;
                                         QUERY PLAN                                         
--------------------------------------------------------------------------------------------
 Sort  (cost=715.46..729.36 rows=5560 width=4)
   Sort Key: operation_code_id
   ->  Seq Scan on audit_messages_sectioned_y2021m07  (cost=0.00..369.60 rows=5560 width=4)
(3 rows)
--- а его дружок, с которым это не выделывали работает нормально

Код: Выделить всё

EXPLAIN select operation_code_id from audit_messages_sectioned_y2021m08 order by operation_code_id;
                                                                             QUERY PLAN                                                                             
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Index Only Scan using i_audit_messages_sectioned_y2021m08_on_operation_code_id on audit_messages_sectioned_y2021m08  (cost=0.56..1048590.12 rows=40380104 width=4)
(1 row)
отбросим в негодовании вопрос "Кто виноват?" (прошлые админы), а обратимся к вопросу "Что делать?"
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: ATTACH DETACH PARTITION

Сообщение pluzanov »

Покажите описание секции и основной таблицы:

Код: Выделить всё

\d+ audit_messages_sectioned_y2021m07
\d audit_messages_sectioned
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: ATTACH DETACH PARTITION

Сообщение pluzanov »

talifa писал(а): Сб ноя 11, 2023 9:57 am коллеги, хелп. postgresql 11
К вопросу не относится, но всё же.
В прошлый четверг закончилась поддержка 11 версии PostgreSQL. Подумайте о переходе на более свежую версию.
К тому же секционированные таблицы появились только в 10-й, да и в 11-й они еще сыроваты.
Ответить