MPBX-VERSION-MISMATCH | conflict | Оптимистичная блокировка: строка изменилась после вашего чтения (в сообщении указаны ожидаемая и текущая version). | Перезагрузите объект и повторите изменение. |
MPBX-PG-DUPLICATE | conflict | Правило уникальности отклонило запись, например номер внутреннего номера уже используется в этой компании. В сообщении назван ограничение. | Выберите другое значение. |
MPBX-PG-REFERENCE | invalid_argument | Ссылка указывает на строку, которой нет в этой компании, либо строка ещё на что-то ссылается и не может быть удалена. | Проверьте идентификатор ссылки и арендатора; сначала удалите зависимые объекты. |
MPBX-PG-CONSTRAINT | invalid_argument | Значение нарушает правило CHECK или NOT NULL (неверный slug, неверный формат номера) либо изменена опубликованная версия схемы вызовов. | Исправьте значение. Опубликованные версии схем неизменяемы: опубликуйте новую версию. |
MPBX-PG-RETRY | conflict | Ошибка сериализации или взаимная блокировка параллельных транзакций. Можно повторить. | Повторите операцию. |
MPBX-PG-UNAVAILABLE | unavailable | Postgres недоступен, перезапускается, либо в пуле за 5 с не нашлось свободного соединения. Можно повторить. | Проверьте состояние Postgres и postgres.max_connections. |
MPBX-PG-TENANT-DENIED | permission_denied | Защита на уровне строк или право на таблицу отклонили оператор (SQLSTATE 42501): транзакция компании попыталась записать строку другой компании, перенести строку в другую компанию или изменить общесистемную таблицу (настройки установки, список компаний). Также возвращается, если роль входа не может переключиться на mpbx_tenant/mpbx_system. | Ошибка или атака в вызывающем коде: код компании должен использовать только репозитории TenantTx. Если ошибка возникает при запуске, выдайте роли: GRANT mpbx_tenant, mpbx_system TO <login role>; (от суперпользователя). |
MPBX-PG-QUERY | internal | Любая другая ошибка базы данных. В сообщении указан SQLSTATE. | Сообщите о ней вместе со строкой журнала. |
MPBX-PG-URL-INVALID | config | postgres.url не разбирается как URL postgres://. Сам URL никогда не выводится. | Исправьте MPBX__POSTGRES__URL или mpbx.toml. |
MPBX-PG-LOGIN-SCOPE-UNSAFE | config | При запуске отдельный вход для области (postgres.tenant_url / postgres.system_url, FU-PBX10-M1) имеет больше прав, чем допускает его область: вход арендатора является суперпользователем, имеет BYPASSRLS, входит в mpbx_system или не входит в mpbx_tenant; либо системный вход является суперпользователем, имеет BYPASSRLS или не входит в mpbx_system. | Используйте роли mpbx_tenant_login / mpbx_system_login из миграций без изменений (docs/guides/database-logins.md). |
MPBX-PG-MIGRATION-FAILED | internal | Миграция завершилась ошибкой, её транзакция откатана; схема не изменилась. | Найдите причину в журнале, исправьте состояние базы данных или сообщите об ошибке. |
MPBX-PG-MIGRATION-MODIFIED | config | Уже применённая миграция была изменена после выпуска (контрольная сумма не совпадает). Миграции только добавляются. | Выпустите изменение как новую миграцию и восстановите исходный файл. |
MPBX-PG-SCHEMA-AHEAD | config | В базе данных есть миграции, которых не знает этот бинарный файл: старый бинарный файл запущен против более новой схемы. Ничего не изменено. | Запустите более новый релиз или откатитесь к снимку базы данных до обновления (mpbx rollback). |
MPBX-PG-MIGRATION-DIRTY | internal | Предыдущий запуск остановился на середине нетранзакционной миграции. | Восстановите из резервной копии. (Все поставляемые миграции транзакционны, поэтому этого не должно происходить.) |