title

text

Андрей Черняков
Андрей Черняков UIS, CoMagic Разработчик баз данных, техлид
17:40 01 апреля
40 мин

pg-transparent-alter-table — изменение больших таблиц под нагрузкой без блокировок одной командой.

Внесение изменений в таблицы под «боевой» нагрузкой — это всегда нетривиальная задача. Например, если нужно сменить тип колонки (int —>bigint, timestamp —> timestamptz) или переместить таблицу в другой tablespace, не потеряв изменения, которые происходили во время переливки данных.

А если таких таблиц сотни? С pg-transparent-alter-table это больше не проблема, и такие задачи решаются одной простой командой: $ pg_tat -h 0.0.0.0 -d mydb -c "alter table mytable alter column id bigint"

Возможности:

— можно указать любое количество команд alter table за раз; 

— можно менять партицированные таблицы, поддерживается старый механизм через наследование, новое декларативное партицирование, многоуровневое партицирование; 

— можно прервать выполнение на любой стадии и продолжить позже, не теряя прогресс предыдущих стадий;

— можно в любой момент передумать, остановить выполнение, выполнить "pg_tat --clean" и вернуться к первоначальному состоянию; 

— есть кастомная команда смены порядка колонок; 

— поддержка версий PostgreSQL 11–17.

За более чем 5 лет существования (раньше назывался transparent-alter-type) проект стал надежным инструментом, который активно используется в продакшене. Хочу поделиться опытом и рассказать про его возможности.

Другие доклады