Конечным исполнителем всех операций являются
pg_dump
иpsql
. Если вы создали бэкап на одном сервере, а восстанавливаете на другом — убедитесь, что вы идете с повышением версии PostgreSQL командойpsql -V
. При понижении версии бэкап, скорее всего, развернут не будет.К частичному переносу таблиц внутренними средствами Тотум это не относится.
bin/totum schema-backup prod_dump.sql
# можно не переносить логи и автоматически сжимать в gz:
bin/totum schema-backup --no-logs --gz prod_dump.sql
# можно не переносить некоторые таблицы:
bin/totum schema-backup --no-content="table_name_1,table_name_2" prod_dump.sql
# если мы дампируем multy, то необходимо указать какую конкретную схему:
bin/totum schema-backup --schema="shema_name" prod_dump.sql
Чем больше дамп базы тем дольше будет выполняться загрузка. Прерывание операции любым способом — приведет к неработоспособности решения.
Убедитесь, что с целевой базой никто не работает в момент загрузки!
bin/totum schema-replace prod_dump.sql
# при выполнении этой операции схема БД полностью заменяется на схему из prod_dump.sql
# по умолчанию кроны при загрузке отключаются, можно это отменить
bin/totum schema-replace --with-active-crons prod_dump.sql
# если восстанавливается существующая схема в multy:
bin/totum schema-replace prod_dump.sql SCHEMA_NAME_FOR_REPLACE
# если содается нвая схема в multy:
bin/totum schema-replace prod_dump.sql SCHEMA_NAME HOST_FOR_SCHEMA
В Totum есть механизм позволяющий выгружать и загружать наборы таблиц с данными или без.
Таким образом, вы можете переносить части решения из одной схемы в другую.
Этот же механизм используется для обновления core-таблиц.
Основная таблица для создания и загрузки находится Системные таблицы
— Импорт/экспорт
— Импорт/экспорт
Таблицы выгружаются и загружаются по
name
. Поэтому, если у вас в двух базах имеются разные таблицы имеющие одинаковыйname
– перенос не удастся, так как при загрузке таблица с совпадающимname
будет перезаписана.Если вы хотите создать выгрузку для тиражного распространения, то при проектировании используйте свой префикс перед названиями таблиц из 3-4 букв и двух нижних подчеркиваний. Для новых системных таблиц мы используем
ttm__
.
Тотум имеет ряд системных таблиц name
которых не могут быть использованы для пользовательских таблиц:
auth_log
calc_fields_log
calcstable_cycle_version
calcstable_versions
crons
log_structure
notification_codes
notifications
panels_view_settings
print_templates
roles
settings
table_categories
tables
tables_fields
tree
users
ttm__... — и таблицы с префиксом ttm__
Чтобы создать выгрузку нажмите СОЗДАТЬ ВЫГРУЗКУ
— вам необходимо выбрать какие таблицы в нее попадут, какие настройки этих таблиц выгружаются и какие поля будут в них выгружены, а также настройки выгрузки данных.
Также задайте Название выгрузки
и если требуется Описание
.
На основании выбранных таблиц в выгрузку будут добавлены элементы Дерева, Роли и Категории таблиц.
Когда вы нажимаете СОЗДАТЬ ВЫГРУЗКУ
, в таблицу Системные таблицы
— Импорт/экспорт
— Импорт/экспорт
будет добавлена строка содержащая запакованный в gzip
json
с дополнительным расширением .ttm
.
Этот файл можно скачать и загрузить в другую схему.
Для загрузки закачайте файл выгрузки в поле Файл загрузки
нажмите на ЗАГРУЗИТЬ ФАЙЛ
. Загрузка в схему в этот момент не происходит — файл с данными будет распакован и откроется окно настроек загрузки.
Будьте внимательны загружая файл от непроверенного источника, он может содержать изменения в базовых таблицах или вредоносные коды. Все чувствительные места загрузки подсвечиваются
красным
. Не выполняйте последующие этапы, если не можете проанализировать действия этих кодов или не уверены в поставщике!
При загрузке по каждой таблице может выполняться добавление
таблицы, обновление
ее полей и обновление данных
в таблице.
Если name
загружаемой таблицы совпадает с name
таблицы в схеме — то произойдет обновление настроек таблицы и настроек полей.
Вы можете управлять тем, какие настройки и поля будут обновлены.
Удаление полей может быть осуществлено только через исполняемый код - его можно увидеть в поле Код каждой таблицы.
При загрузке данных имеет значение тип действия ключевые поля.
На основе ключевого поля Тотум определяет соответствие данных, уже содержащихся в таблице и загружаемых данных.
Тип определяет действие — добавлять и изменять
, только добавлять
, только изменять
.
Ключевые поля обязательно должны быть указаны в списке полей, по которым выгружаются данные.
При загрузке вам необходимо указать соответствие Ролей, Дерева и Категорий в схеме, в которую ведется загрузка и в загружаемом файле.
Например, роль Руководитель в схеме выгрузки и загрузки может иметь разные id (аналогично папки дерева и категории таблиц).
Вам необходимо указать соответствия или указать, что необходимо создать новую запись.
При загрузке эти соответствия будут записаны в поле matches
таблицы Импорт/экспорт
для последующих загрузок.
Поиск матчесов ведется по имени файла загрузки.
Поле matches
таблицы Импорт/экспорт
определяет автоматические соответствия ролей
, дерева
и категорий
для загружаемых схем.
Описание totum_** является техническим и необходимо для корректной установки обновлений.
Поле содержит массив:
ключи
— номера id
в загружаемой схеме
значения
— номера id
в текущей схеме
Если соответствие не найдено, то загружаемый элемент создается и автоматически обновляется matches
.
Выгрузка может содержать коды, которые будут выполнены при загрузке.
Коды выполняются после загрузки настроек, полей и данных таблицы.
В коде передается несколько переменных:
$#insertedIds
— id
добавленных строк, если было добавление данных.
$#changedIds
— id
измененных строк, если было добавление данных.
$type
—
install
если таблица добавляется в пустую схему БД.update
если таблица добавляется в уже существовашшую схему БД.$#is_table_created
— true
если таблица впервые добавлена в схему.
Коды при загрузке выполняются без всяких ограничений по доступам!
Для обновления схемы можно использовать консольную утилиту bin/totum
.
Загрузите на сервер файл загрузки **.gz.ttm
.
Выполните из корневой папки тотума:
# Для no-multy
bin/totum schema-update MATCHES_NAME PATH_TO_FILE
# Для multy для обновления всех схемы:
bin/totum schemas-update MATCHES_NAME PATH_TO_FILE
# Для multy для обновления одной схемы:
bin/totum schema-update MATCHES_NAME PATH_TO_FILE --schema="SCHEMA_NAME"
MATCHES_NAME
— если загрузка производится впервые для схемы и соответсвие вMatches
не будет найдено, то все элементыДерева
,Ролей
иКатегорий
будут обработаны как добавляемые за исключением ролиСоздатель
и будет создана запись соответствий вMatches
с указанным именем.
Если предполагается тиражируемое решение или проект невозможно модифицировать на боевом сервере — то:
Создаем PROD
и разрабатываем на нем решение. Если вы разрабатывали на TEST
то начните с п.3
—
2.1 Создаем выгрузку с PROD
при помощи консольной команды:
bin/totum schema-backup prod_dump.sql
# можно не переносить логи и автоматически сжимать в gz:
bin/totum schema-backup --no-logs --gz prod_dump.sql
# можно не переносить некоторые таблицы:
bin/totum schema-backup --no-content="table_name_1,table_name_2" prod_dump.sql
2.2 Разворачиваем чистый TEST
на отдельном сервере/папке и базе и загружаем созданную выгрузку:
bin/totum schema-replace prod_dump.sql
# при выполнении этой операции схема БД полностью заменяется на схему из prod_dump.sql
# по умолчанию кроны при загрузке отключаются, можно это отменить
bin/totum schema-replace --with-active-crons prod_dump.sql
2.1 Выполняем:
bin/totum schema-duplicate ИМЯ_КОПИРУЕМОЙ_СХЕМЫ ИМЯ_СОЗДАВАЕМОЙ_СХЕМЫ URL_НОВОЙ_СХЕМЫ
# кроны в этом случае отключаются автоматически
Создаем master-выгрузку из TEST
— эта выгрузка будет основной, название файла будет использовано в matches
в PROD
При создании этой выгрузки необходимо поставить галочку в поле Матчить существующие
f_match_existings
. Если они стоит, то при загрузке вPROD
будут автоматически сматчены элементы дерева, роли и категории таблиц.
Загружаем нашу master-выгрузку в PROD
с двумя целями:
Если вы разрабатывали на
TEST
и переносите проект наPROD
, то создайте master-выгрузку сTEST
, создайте чистыйPROD
и загрузите на него master-файл.
Matches
будут созданы по имени файла — переименуйте, если необходимо.
Для обновления:
5.1 Разрабатываем на TEST
.
5.2 Обновляем master-файл при помощи Создать по текущим настройкам
5.3 Загружаем файл в схему или схемы через интерфейс или bin/totum
.
Если загружаете на multy в котором у вас и PROD-базы и тестовая, то необходимо исключить TEST из обновления:
bin/totum schemas-update MATCHES_NAME PATH_TO_FILE --exclude="schema1,schema2" --exclude="schema3"