Публичное пространство
Обновление кассы PostgreSQL 11 до 16 TinyCore
Внимание!
Обновляйте небольшое количество касс данным инструментом за один раз: от 1 до 10.
Инструмент производит обновление касс с любой версии СУБД PostgreSQL на 16-ю ОС TinyCore!
Требования
Обновляйте кассу только при условии:
смена закрыта;
все чеки выгружены;
нет фонового обмена;
касса работает штатно;
есть стабильное питание;
есть минимум свободного места размера БД свободного места.
Скрипт обновления
Скачайте инструмент обновления.
Обновление
Подготовка
Выполняйте все шаги в строгой последовательности.
1. Проверьте, что тип ОС TinyCore
uname -a
2. Проверьте версию PostgreSQL, что она 11-ая командой.
sudo cat /etc/sysconfig/tcedir/../pgsql/data/PG_VERSION
3. Проверьте свободное место для обновления базы данных:
размер каталога
pgsqlдолжен быть свободен в 2 раза больше;минимум +1 ГБ запас.
sudo df -h /etc/sysconfig/tcedir/../pgsql/
4. Остановите кассовое программное обеспечение.
cash stop
5. Проверьте, что отсутствуют запущенные процессы кассового ПО.
pgrep -f loader.LoaderПроцессов быть не должно.
6. Выполните команду для создание резервной копии всей СУБД.
pg_dumpall -U postgres > /mnt/backup_pg_cluster.sql
7. Проверьте, что файл создан:
test -f /mnt/backup_pg_cluster.sql && echo "File exists" || echo "File does not exist"
8. Скопируйте все файлы PostgreSQL 11 в резервную папку.
cp -r /etc/sysconfig/tcedir/../pgsql /mnt/pgsql_backup
9. Проверьте корректность файла резервной копии базы данных:
head /mnt/backup_pg_cluster.sqlСодержимое файла должно быть следующее:
10. Распакуйте и скопируйте скрипт на кассу с помощью WinSCP или SetConsole.
11. Скопируйте upgrade_pg11_pg16_tinycore.sh распакованный скрипт в папку /home/tc.
12. Дождитесь окончания копирования.
13. Выполните команду по установке прав.
chmod +x upgrade_pg11_pg16_tinycore.sh
Процесс обновления
Скрипт запускаетй без команды sudo
внутри скрипта уже используются
sudoиспользуются команды
tce-load / tce-unloadrollback-логика рассчитана на user-context
Запуск через sudo может привести к некорректному обновлению.
Запустите скрипт обновления только командой (без sudo)
./upgrade_pg11_pg16_tinycore.shДождитесь окончания процесса.
Логика работы скрипта обновления
Скрипт автоматически:
показывает экран обновления;
останавливает кассу;
блокирует порт PostgreSQL;
делает
pg_dumpall;останавливает PostgreSQL 11;
переносит старый кластер в каталог pgsql_11;
обновляет бинарные файлы PostgreSQL;
инициализирует новый кластер;
переносит настройки доступа;
запускает PostgreSQL 16;
восстанавливает дамп;
удаляет старый кластер;
разблокирует порт;
запускает кассу;
Проверка после обновления
1. Проверьте, что версия PostgreSQL = 16
psql --version
2. Проверьте готовность базы данных командой:
pg_isready
3. Проверьте список подлключенных баз данных
psql -U postgres -c "\l"
4. Проверьте, что касса запущена в статусе POS Loaded: YES.
cash status
5. Проведите тестовую продажу.
Статус успешного обновления
PostgreSQL 16 работает;
касса запускается;
тестовый чек прошел успешно;
обмен с сервером работает;
ошибки в лог-файлах отсустствуют.
Откат
Автоматический
Происходит автаматический откат, если ошибка произошла внутри скрипта обновления:
старый кластер возвращается;
старые бинарники возвращаются;
PostgreSQL 11 запускается;
касса запускается;
По окончании работы отката проверьте работу кассы.
Ручной откат
Ручной откат производится в случае, если во время обновления произошел сбой.
1. Остановите PostgreSQL:
pg_ctl stop -D /etc/sysconfig/tcedir/../pgsql/data
2. Удалите новый кластер:
rm -rf /etc/sysconfig/tcedir/../pgsql
3. Восстановите предыдущую версию PostgreSQL:
mv /etc/sysconfig/tcedir/../pgsql_11 /etc/sysconfig/tcedir/../pgsql
4. Верните предыдущие бинарные файлы:
tce-unload postgresql
cp /etc/sysconfig/tcedir/tce/optional/backup/pg11/postgresql.tcz* \
/etc/sysconfig/tcedir/tce/optional/
tce-load -i postgresql
5. Запустите PostgreSQL:
pg_ctl start -D /etc/sysconfig/tcedir/../pgsql/data
6. Запусите кассовое ПО:
cash startСписок аварийных и критических сценариев
пропало питание;
завислов восстановление;
PostgreSQL не запускается;
нет каталога pgsql_11.
Тогда:
восстановите каталог из папки /mnt/pgsql_backup;
восстановить дамп базы данных;
перезагрузить кассу.