Перейти к содержимому

Миграции базы данных

SQL вручную ты никогда не импортируешь. bs_core сам создаёт и обновляет схему при запуске.

  • Файлы миграций лежат в bs_core/sql/, пронумерованы (сейчас от 001_core_schema.sql до 035_faction_jobs.sql).
  • При старте bs_core по порядку выполняет каждый файл из своего списка, который ещё не записан, и фиксирует его в таблице bs_migrations с контрольной суммой. Файл никогда не выполняется дважды.
  • Консоль выводит, что было применено при этом запуске.
  • Несколько resource создают свои небольшие таблицы через CREATE TABLE IF NOT EXISTS при старте (например bs_tester и bs_config). С ними тоже ничего делать не нужно.
ФайлДобавляет
029_vehicle_world.sqlМировой транспорт, отсутствующие детали
030_user_language.sqlbs_users.language
031_building.sqlbs_build_pieces, bs_build_bases, переносит старые постройки во фракции
032_crafting.sqlОчереди станций, ловушки, офлайн-возвраты, точки recycler
033_medical.sqlbs_character_medical: ранения, инфекция, болезнь, кровь
034_base_flags.sqlФлаги безопасной зоны и форпостов, объявленные рейды
035_faction_jobs.sqlУчастники работ, доска, очки, выбор работ, работа в гараже
045_darkzone.sqlDark Zone (1.1.0)
046_building_v2.sqlСтроительство v2: электричество, генераторы, флаги (1.1.0)
047_faction_emblems.sqlЭмблемы фракций (1.1.0)
048_backpack_refresh.sqlПредметы-рюкзаки переименованы, содержимое сохраняется (1.1.0)
  1. Возьми следующий номер: bs_core/sql/036_my_change.sql.
  2. Пиши её так, чтобы она была безопасна на базе, в которой уже есть данные. Добавляй столбцы со значениями по умолчанию, не удаляй то, чем люди ещё пользуются.
  3. Добавь имя файла в список в bs_core/server/sv_migrations.lua (M.files). Список зашит в код. Файл, которого в нём нет, молча никогда не запустится.
  4. Перезапусти сервер (перезапуск одного bs_core выкидывает всех).

Перед обновлением с миграциями сделай бэкап. В Windows:

Окно терминала
powershell -ExecutionPolicy Bypass -File .\tools\Backup-Database.ps1

См. Обновление и база данных про восстановление и перенос персонажей между серверами.