0.137.1
Fixed
- **Ошибка «отношение reindex_jobs не существует» на PostgreSQL **: в
internal/store/pgmigrations/отсутствовали PG-порты миграций 075 (индексыmessages.user_id,audit_log.action,audit_log.resource_type), 076 (oauth_sessions.ip_fingerprint) и 077 (таблицаreindex_jobs). PG-набор прыгал 074→078, поэтому на PostgreSQL эти объекты никогда не создавались →GetActiveReindexJobпадал сSQLSTATE 42P01на каждом запросе статуса переиндексации (страница «Расширенные настройки»). Добавлены PG-миграции 075/076/077 (перевод SQLite-схемы наBIGSERIAL/TIMESTAMPTZ) + миграция 084_pg_backfill_missing_objects (идемпотентныйIF NOT EXISTS) для самоисцеления уже развёрнутых PG-БД (гдеschema_migrations= 83, и миграции 075-077 не применятся мигратором). Для паритета номеров 1:1 добавлены SQLite-аналоги 084 (no-op, т.к. SQLite не имел разрыва). - **Спам поллингом статуса переиндексации **: фронт каждые 2с опрашивал
/admin/embeddings/reindex/statusи при ошибке не останавливался — текст ошибки мерцал (то появлялся, то пропадал). Теперь при первой же ошибке поллинг останавливается (pollingStopped=true), тихий опрос (pollTick) не сбрасываетerror/loadingперед запросом (убирает мерцание). Добавлена кнопка «Повторить» в блоке ошибки и методretry(). - Защитная обработка PG-ошибки
42P01в хендлерах переиндексации:Status/Jobs/Cancelпри отсутствии таблицыreindex_jobsотвечают idle-200 (вместо 500), чтобы UI не ломался до применения миграции. Добавленstore.IsUndefinedTableError(err)(детектpgconn.PgErrorCode42P01).
Changed
- Partial unique index
uniq_active_reindex_jobпереведён на константу(1)(вместоstatus): индекс наstatusзапрещал лишь дубликаты с одинаковым статусом, но не два разных активных job (pending+runningпосле краха процесса). Константа(1)гарантирует максимум один active job на уровне БД (defense-in-depth). Исправлено в 077 (SQLite+PG) и 084 (backfill). TestPGMigrationFilesExistусилен: добавлена проверка в обратном направлении (каждая SQLite-миграция должна иметь PG-аналог) — регресс с пропуском 075-077 теперь ловится в CI.- 084_pg_backfill:
SET LOCAL statement_timeout = 0передCREATE INDEX— снимает 5-минутный лимит пула, чтобы индексация большихmessages/audit_logв проде не оставила миграцию dirty.