2009-06-15

Репликация PostgreSQL+Bucardo. Правила при изменении структуры БД

Итак, наконец мы можем сформировать набор правил, как работать с bucardo при изменении структуры подчиненных БД.

При изменении структуры существующих таблиц, если изменения структуры не затронули первичные ключи:
1. Остановить репликацию.
2. Обновить ВСЕ подчиненные БД.
3. Теми же скриптами обновить главную БД. В скриптах ни в коем случае не должны меняться данные - только структура.
4. Запустить репликацию.
5. Проверить, что все работает.

При изменении структуры существующих таблиц, если затронуты первичные ключи:
1. Остановить репликацию.
2. Выполнить скрипты по изменению структуры подчиненных БД. Данные пока не менять.
3. Те же скрипты по изменению структуры выполнить на главной БД.
4. Изменить таблицу bucardo.goat в соответствии с изменениями поля первичного ключа подчиненной БД.
5. На подчиненных БД на таблицах, где поменялось поле первичного ключа удалить триггера bucardo_add_delta_d, bucardo_add_delta_i, bucardo_add_delta_u, bucardo_triggerkick_..._sync.
6. На главной БД выполнить обновление таблицы sync следующим образом:
UPDATE bucardo.sync SET synctype = 'fullcopy' WHERE name = 'правильная_ссылка';
UPDATE bucardo.sync SET synctype = 'pushdelta' WHERE name = 'правильная_ссылка';
7. Проверить, что в подчиненных БД на таблицах с измененным полем ПК созданы новые триггера.
8. В подчиненных БД выполнить изменение данных, если это предусмотрено обновлением.
9. Запустить репликацию.
10. Проверить, что все работает.

При добавлении новых таблиц в репликацию.
1. Создать таблицы в подчиненной БД.
2. Создать таблицы в главной БД.
3. Добавить данные по таблицам в БД bucardo в goat и herdmap.
4. Остановить репликацию.
5. На главной БД выполнить обновление таблицы sync следующим образом:
UPDATE bucardo.sync SET synctype = 'fullcopy' WHERE name = 'правильная_ссылка';
UPDATE bucardo.sync SET synctype = 'pushdelta' WHERE name = 'правильная_ссылка';
6. Проверить, что на новых таблицах создались триггера.
7. Запустить репликацию.
8. Проверить, что все работает.

При удалении таблиц из репликации:
1. Остановить репликацию.
2. Удалить таблицы из goat и herdmap.
3. На главной БД выполнить обновление таблицы sync следующим образом:
UPDATE bucardo.sync SET synctype = 'fullcopy' WHERE name = 'правильная_ссылка';
UPDATE bucardo.sync SET synctype = 'pushdelta' WHERE name = 'правильная_ссылка';
4. На подчиненных БД на таблицах, которые больше не нужно реплицировать удалить триггера bucardo_add_delta_d, bucardo_add_delta_i, bucardo_add_delta_u, bucardo_triggerkick_..._sync.
5. Запустить репликацию.
6. Проверить, что все работает.

Комментариев нет: