Sql export table to json by timestamp
Материал из Eludia.
Описание
Экспортирует при помощи sql_export_json структуру и содержимое заданной таблицы, начиная с определённого момента времени. Предназначена для синхронизации состояния log и других неизменяемых задним числом таблиц между рабочей и резервной БД.
Перед экспортом как таковым производятся следующие операции:
- проверяется наличие поля типа timestamp. Если такововго не находится:
- создаётся поле ts типа timestamp;
- создаётся индекс по нему;
- значение поля устанавливается в текущее время.
- проверяется наличие пропусков в последовательности id записей таблицы. Для недостающих значений id создаются пустые записи с fake = -127.
Если заданное время $ts_from, а текущее — $now, то экспортируются записи, для которых
$ts_from < $table.ts < $now
Таким образом, результирующий может НЕ содержать данных, добавленных/исправленных в течение последней секунды. При настройке синхронизации путём периодического копирования дампов это не имеет существенного значения: резервная копия всё равно имеет запаздывание. Зато для следующей синхронизации результат запроса
SELECT MAX(ts) FROM $table
из резервной БД можно использовать как аргумент $ts_from для sql_export_table_to_json_by_timestamp на боевой инсталляции.
Синхронизация удалений производится 2 способами:
- вышеупомянутым созданием записей-заглушек;
- добавлением в дамп строки
DELETE FROM $table WHERE id > $max_id
, где $max_id — максимальное значение id на момент экспорта.
Итак, sql_export_table_to_json_by_timestamp корректно применять в том случае, если записи таблицы последовательно нумеруются, начиная с 1.
Если таблица является append only, то в аналогичных целях эффективнее применять sql_export_table_to_json_by_id.
Синопсис (Perl5)
sql_export_table_to_json_by_timestamp (log, OUTFILE, $ts_from);
Категории: API | SQL | Репликация
