Все потоки
Поиск
Написать публикацию
Обновить

Глобальные индексы для секций в Postgres Pro: глобальная уникальность без костылей

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.9K
Всего голосов 13: ↑13 и ↓0+17
Комментарии6

Комментарии 6

Спасибо за статью.

А можете прояснить - как работает DETACH | DELETE PARTITION? Как условный delete "из индекса" - т.е. для каждой строки в отсоединяемой партиции нужно будет найти и отметить строку в глобальном индексе? Или же записи остаются в индексе условно "живыми", а удалёнными отмечаются только при попытке доступа к ним?

>как работает DETACH | DELETE PARTITION? 

При операциях удаления и DETACH PARTITION глобальный индекс не перестраивается. То есть, для глобального индекса является нормальным содержать некоторое количество недействительных данных (которые могут быть очищены с помощью команды VACUUM).

>Или же записи остаются в индексе условно "живыми", а удалёнными отмечаются только при попытке доступа к ним?

В глобальном индексе записи не помечаются как удалённые, так как в глобальном индексе хранятся не ссылки на версии записей в heap-таблицах (как в btree), а значения ключевых полей. Поэтому помечать как удалёнными записи не получится, так как при повторном добавлении записи с теми же значениями индексную запись придётся включать.

Интересно, спасибо.

Спасибо за статью.

Есть вопрос: говоря о секционированных таблицах, вы имеете в виду таблицы, хранящиеся на одном сервере? То есть без использования шардирования в рамках распределенной базы данных?

Да, всё верно, имеются в виду таблицы, хранящиеся на одном сервере.

Для использования шардирования требуется, чтобы глобальный индекс также был распределён по разным серверам (вместе с соответствующими им данными в секциях).

Но текущая реализация глобального индекса изначально проектировалась без поддержки секционирования, поэтому нет и поддержки шардирования.

Спасибо, теперь ясно.

Но наверное тогда лучше было бы называть этот индекс, например, общим для всех секций, и не глобальным, чтобы не вызывать дополнительных вопросов.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий