🗃️ Homebox: Исправление ошибки поиска на кириллице и миграция на PostgreSQL
Если ты тоже столкнулся с проблемой поиска предметов в имени которых присутсвуют слова на кириллице (не только на русском, но и на украинском языке), то это руководство для тебя.
Проблема возникает, если используется SQLite в качестве хранилища.
Решиние: использовать БД PostgreSQL.
Шаг №1
Необходимо сделать резервную копию всех данных.
Выполняется эта операция в разделе: Tools > Backup & Restore > Create Backup.
По завершению необходимо нажать на ссылку Download.
Загрузится *.zip архив с JSON файлами и вложениями.
Шаг №2
Создание нового инстанса (запуск homebox) с необходимыми параметрами,
т.к. по умолчанию используется SQLite.
Мой скрипт запуска выглядит примерно так:
#!/bin/sh
./homebox \
--web-host 127.0.0.1 \
--web-port 7745 \
--auth-api-key-pepper ... \
--database-driver postgres \
--database-database homebox \
--database-host 0.0.0.0 \
--database-port 5432 \
--database-username homebox \
--database-password ...
Регистрируем нового пользователя и переходим в раздел Tools > Backup & Restore > Restore from Backup.
Загружаем архив резервной копии и дожидаемя окончание импорта.
Возможно, что ты столкнёшся с HTTP ошибкой
413 Request Entity Too Large.
Я используюnginx, по этому достаточно добавить параметрclient_max_body_size 100Mв секциюhttp,serverилиlocationна выбор.
Скорее всего в логах приложения появится следующая ошибка.
Если так, то переходим к шагу 3, а потом возвращаемся к шагу 2:
insert entity_types: failed to encode args[6]: unable to encode 1 into binary format for bool (OID 16): cannot find encode plan
Шаг №3
Ошибка говорит о том, что значения в JSON не соответствуют типу BOOL,
а именно вместо true/false в данных используется 1/0.
Текст в логе insert entity_types намекает в каком файле ошибка.
В моём случае в файле entity_types.json.
(Эта ошибка будет и в других файлах, но по этому тексту понятно, в какой файл нужно смотреть).
Необходимо заменить значения 1/0 на true/false.
Чтобы ничего не сломать, в текстовом редакторе выполняем поиск по шаблону ":0 или ":1.
Не все значения необходимо изменять, а только те, имена которых подразумевают хранение булевого значения.
Это не сложно, так всё очевидно.
Вот список параметров для поиска (скорее всего тут не все, отпишитесь, чтобы я их добавил):
sync_child_entity_locationslifetime_warrantyinsuredboolean_valueprimary
Параметры вроде sold_price, purchase_price или quantity хранят числовое значение.
Правим файлы, запаковываем обратно в *.zip и выполняем Restore from Backup снова.