Многие начинают знакомство с Home Assistant «как есть» — с минимальными настройками и базой данных SQLite. Это отличный старт, особенно если вы только строите свой умный дом. Но когда система обрастает датчиками, автоматизациями и историей, SQLite начинает тормозить.
Решение — перейти на более производительное хранилище данных, такое как PostgreSQL.
В этой статье покажу, как выполнить миграцию с SQLite на PostgreSQL, сохранив накопленную статистику и избежав ошибок. Всё проверено на Home Assistant 2025.5.
Подготовка и важные моменты
Перед началом обязательно сделайте резервную копию: Настройки → Система → Резервное копирование.
Миграция данных из SQLite
Нам нужна чистая база PostgreSQL. Вы можете арендовать её у хостинг-провайдера или установить локально на сервере, где крутится ваш Home Assistant.
Как развернуть базу — отдельная тема, поэтому здесь считаем, что она уже создана и называется homeassistant.
Для переноса данных воспользуемся утилитой pgloader.
Установка (на Debian/Ubuntu-системах):
$ apt-get install pgloader
Далее создаём файл migrate.load
с настройками для миграции, где указываем во from путь до файла нашей SQLite базы, а в into параметры подключения к PostgreSQL базе:
load database
from sqlite:////var/ha/config/home-assistant_v2.db
into postgresql://homeassistant_user:MyPassword@myhost.ru:5432/homeassistant
with include drop, create tables, create indexes, reset sequences
set work_mem to '16MB', maintenance_work_mem to '512 MB';
После этого запускаем миграцию:
$ pgloader migrate.load
Процесс может занять несколько минут. В конце вы должны увидеть отчёт об успешной миграции. Проверьте, что в новой базе созданы таблицы.
Для переключения на новую базу, в файл configuration.yaml
добавляем настройки подключения, аналогичные как были заданы в настройках миграции.
recorder:
db_url: postgresql://homeassistant:YouPassWord@127.0.0.1:5432/homeassistant
Перезапустите Home Assistant — он должен начать писать данные в PostgreSQL. Но на этом дело не заканчивается.
Перечисления
Во многих статьях на этом моменте всё заканчивается. Но без одного важного шага Home Assistant начнёт ругаться: появятся ошибки в логах, а в интерфейсе — пустые графики.
Дело в том, что pgloader не создаёт SEQUENCE, которые нужны для автонумерации записей в таблицах. Придётся создать их вручную.
Подключитесь к базе PostgreSQL (через psql или PgAdmin) и выполните следующие запросы:
CREATE SEQUENCE event_data_id_seq;
ALTER TABLE event_data ALTER COLUMN data_id SET DEFAULT nextval('event_data_id_seq');
SELECT setval('event_data_id_seq', COALESCE((SELECT MAX(data_id) FROM event_data), 1), true);
CREATE SEQUENCE events_id_seq;
ALTER TABLE events ALTER COLUMN event_id SET DEFAULT nextval('events_id_seq');
SELECT setval('events_id_seq', COALESCE((SELECT MAX(event_id) FROM events), 1), true);
CREATE SEQUENCE metadata_id_seq;
ALTER TABLE states_meta ALTER COLUMN metadata_id SET DEFAULT nextval('metadata_id_seq');
SELECT setval('metadata_id_seq', COALESCE((SELECT MAX(metadata_id) FROM states_meta), 1), true);
CREATE SEQUENCE recorder_runs_id_seq;
ALTER TABLE recorder_runs ALTER COLUMN run_id SET DEFAULT nextval('recorder_runs_id_seq');
SELECT setval('recorder_runs_id_seq', COALESCE((SELECT MAX(run_id) FROM recorder_runs), 1), true);
CREATE SEQUENCE schema_changes_id_seq;
ALTER TABLE schema_changes ALTER COLUMN change_id SET DEFAULT nextval('schema_changes_id_seq');
SELECT setval('schema_changes_id_seq', COALESCE((SELECT MAX(change_id) FROM schema_changes), 1), true);
CREATE SEQUENCE state_attributes_id_seq;
ALTER TABLE state_attributes ALTER COLUMN attributes_id SET DEFAULT nextval('state_attributes_id_seq');
SELECT setval('state_attributes_id_seq', COALESCE((SELECT MAX(attributes_id) FROM state_attributes), 1), true);
CREATE SEQUENCE states_id_seq;
ALTER TABLE states ALTER COLUMN state_id SET DEFAULT nextval('states_id_seq');
SELECT setval('states_id_seq', COALESCE((SELECT MAX(state_id) FROM states), 1), true);
CREATE SEQUENCE statistics_id_seq;
ALTER TABLE statistics ALTER COLUMN id SET DEFAULT nextval('statistics_id_seq');
SELECT setval('statistics_id_seq', COALESCE((SELECT MAX(id) FROM statistics), 1), true);
CREATE SEQUENCE statistics_meta_id_seq;
ALTER TABLE statistics_meta ALTER COLUMN id SET DEFAULT nextval('statistics_meta_id_seq');
SELECT setval('statistics_meta_id_seq', COALESCE((SELECT MAX(id) FROM statistics_meta), 1), true);
CREATE SEQUENCE statistics_runs_id_seq;
ALTER TABLE statistics_runs ALTER COLUMN run_id SET DEFAULT nextval('statistics_runs_id_seq');
SELECT setval('statistics_runs_id_seq', COALESCE((SELECT MAX(run_id) FROM statistics_runs), 1), true);
CREATE SEQUENCE statistics_short_term_id_seq;
ALTER TABLE statistics_short_term ALTER COLUMN id SET DEFAULT nextval('statistics_short_term_id_seq');
SELECT setval('statistics_short_term_id_seq', COALESCE((SELECT MAX(id) FROM statistics_short_term), 1), true);
Эти команды создают все необходимые SEQUENCE, чтобы Home Assistant мог корректно продолжать работу с базой: добавлять события, состояния и статистику.
Итог
Теперь ваш Home Assistant работает с PostgreSQL, а это значит:
более высокая производительность;
стабильность при длительной работе;
меньше проблем с повреждением базы;
возможность удалённого доступа к данным.
Если вы всерьёз занимаетесь умным домом, такая миграция — шаг к стабильной и надёжной системе. А SQLite... пусть остаётся для тестов 😉.