Пользователи PostgreSQL часто сталкиваются с проблемой разрастания базы данных, что может значительно ухудшить производительность. Традиционные методы, такие как VACUUM FULL и CLUSTER, могут быть довольно разрушительными, но pg_repack предлагает онлайн-решение, которое минимизирует время простоя. Здесь мы рассмотрим установку и настройку pg_repack на PostgreSQL 14, работающем на Red Hat Enterprise Linux 9 (RHEL 9).
Что такое pg_repack?
pg_repack — это расширение PostgreSQL, предназначенное для устранения разрастания таблиц и индексов. В отличие от CLUSTER и VACUUM FULL, pg_repack работает онлайн, не требуя эксклюзивной блокировки обрабатываемых таблиц, что делает его более эффективным и менее навязчивым вариантом.
Установка
- Загрузка RPM-пакета
Сначала загрузите RPM-пакет pg_repack для PostgreSQL 14 на RHEL 9:wget https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-9-x86_64/pg_repack_14-1.5.0-1PGDG.rhel9.x86_64.rpm
- Установка RPM-пакета
Затем установите загруженный RPM-пакет:rpm -iv pg_repack_14-1.5.0-1PGDG.rhel9.x86_64.rpm
- Проверка установки
Проверьте установку, перечислив файлы, включенные в пакет:rpm -ql pg_repack_14-1.5.0-1PGDG.rhel9.x86_64.rpm | grep bin
Альтернативно, используйте команду find для поиска бинарного файла pg_repack:find / -name pg_repack
- Обновление переменной окружения PATH
Добавьте каталог bin PostgreSQL в ваш PATH:export PATH=$PATH:/usr/pgsql-14/bin
Сделайте это изменение постоянным, добавив его в ваш файл ~/.bashrc:echo 'export PATH=$PATH:/usr/pgsql-14/bin' >> ~/.bashrc
source ~/.bashrc
Настройка
- Создание расширения
Подключитесь к вашей базе данных PostgreSQL и создайте расширение pg_repack:psql -c "CREATE EXTENSION pg_repack" -d employee
- Проверка доступности pg_repack
Чтобы убедиться, что pg_repack доступен, перечислите бинарные файлы PostgreSQL:pg_re
Вы должны увидеть pg_repack среди других бинарных файлов PostgreSQL:pg_receivewal pg_recvlogical pg_repack pg_resetwal pg_restore pg_rewind
Если вы его не видите, возможно, вы забыли выполнить команду source ~/.bashrc.
Использование
Основное использование
Чтобы упаковать конкретную базу данных (например, employee), используйте следующую команду:
pg_repack -d employee
Расширенные опции
pg_repack предлагает несколько опций для настройки своего поведения. Вот некоторые полезные из них:
- Упаковка всех баз данных:
pg_repack -a
- Упаковка конкретной таблицы:
pg_repack -t table_name -d employee
- Упаковка таблиц в определенной схеме:
pg_repack -s schema_name -d employee
- Перемещение упакованных таблиц в новое пространство таблиц:
pg_repack -T new_tablespace -d employee
- Сортировка по определенным столбцам:
pg_repack -o column_name -d employee
Для полного списка опций обратитесь к справке по pg_repack:
pg_repack --help