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);
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты