Ошибка PostgreSQL 42704: undefined_object — диагностика объектов
- Ошибка
ERROR: collation / type / operator "..." does not exist (SQLSTATE 42704). - Платформа 1С:Предприятие выдает ошибку при реструктуризации: «Ошибка СУБД: правило сортировки (collation) не найдено».
- Сбои выполнения скриптов миграции при удалении объектов через
DROP ...без проверки существования.
1. Проверка отсутствующих правил сортировки (Collation) для 1С
Для корректной работы 1С требуются правила сортировки `"default"`, `"C"` или специализированные ICU collation:
SELECT collname, collnamespace, collencoding, collcollate
FROM pg_collation
WHERE collname LIKE '%ru%' OR collname = 'default';Если правила сортировки отсутствуют после обновления ОС:
-- Обновление версий локалей ICU / glibc:
ALTER COLLATION "ru_RU" REFRESH VERSION;
-- Создание кастомного правила сортировки для 1С:
CREATE COLLATION "ru_RU.UTF-8" (LOCALE = 'ru_RU.UTF-8');2. Проверка отсутствующих пользовательских типов данных
SELECT t.typname, n.nspname
FROM pg_type t
JOIN pg_namespace n ON n.oid = t.typnamespace
WHERE t.typname = 'my_custom_type';3. Использование безопасного синтаксиса IF EXISTS
-- Защита от ошибки 42704 при накатке миграций:
DROP TYPE IF EXISTS status_enum CASCADE;
DROP OPERATOR IF EXISTS === (text, text);4. Проверка и установка недостающих расширений
CREATE EXTENSION IF NOT EXISTS mchar; -- Специализированное расширение для 1С Частые вопросы (FAQ)
Почему после обновления Ubuntu с 20.04 до 22.04 базы 1С выдают 42704 на collation?
В новых версиях glibc меняются контрольные суммы и версии локалей. PostgreSQL регистрирует несовместимость Collation Version Mismatch. Требуется выполнить REINDEX и команду ALTER COLLATION ... REFRESH VERSION.
Чем 42704 отличается от 42P01 (undefined_table)?
Код 42P01 относится исключительно к таблицам, представлениям и сиквенсам, тогда как 42704 покрывает все прочие метаобъекты: типы данных, правила сортировки, операторы, преобразования типов (casts) и расширения.
Что такое расширение mchar в сборках PostgreSQL для 1С?
mchar — это расширение, реализующее совместимый с 1С тип данных MCHAR и MVIO, обеспечивающий корректную работу с пробелами в конце строк в строковом типе фиксированной длины.
Как просмотреть список всех установленных операторов?
Выполните команду psql: \do или сделайте запрос к системному каталогу pg_operator.