Перейти в канал

Tg: habr.com

1
Почему массивы в PostgreSQL — это NoSQL под прикрытием Использование массивов (например, integer[]) в PostgreSQL — это осознанный отказ от реляционных гарантий в пользу локальности данных. Элементы внутри массива не поддерживают внешние ключи (Foreign Keys) и каскадное удаление (ON DELETE CASCADE). Это документная модель, встроенная в реляционную структуру. Главная проблема кроется в изменении данных. Из-за архитектуры MVCC (Multi-Version Concurrency Control) обновление даже одного элемента массива заставляет СУБД полностью копировать и перезаписывать всю строку. Если размер массива превышает 2 КБ, он выносится в отдельное хранилище TOAST. Обновление TOAST-массива требует полной распаковки, модификации и повторного сжатия данных, что создает колоссальную нагрузку на CPU и I/O. Рассмотрим нюансы работы с многомерными массивами и индексами.