Ошибка PostgreSQL 3F000: invalid_schema_name — настройка схем
- Ошибка
ERROR: schema "." does not exist (SQLSTATE 3F000) - Сбои при создании базы данных 1С:Предприятие в консоли кластера: «Ошибка создания информационной базы: схема не найдена».
- Запросы падают при попытке явного обращения к таблицам через префикс несуществующей схемы (например,
custom_schema.table1).
1. Просмотр существующих схем в базе данных
SELECT schema_name, schema_owner
FROM information_schema.schemata
ORDER BY schema_name;2. Создание отсутствующей схемы и назначение прав
CREATE SCHEMA IF NOT EXISTS "custom_schema" AUTHORIZATION usr1cv8;
GRANT ALL ON SCHEMA "custom_schema" TO usr1cv8;3. Проверка и настройка пути поиска по умолчанию (search_path)
Если запросы 1С не находят стандартную схему, проверьте переменную search_path:
SHOW search_path;
-- Установка для текущей сессии:
SET search_path TO public, "$user";
-- Установка пути поиска на уровне всей базы данных 1С:
ALTER DATABASE ib_production SET search_path TO public;4. Восстановление прав на схему public
Начиная с PostgreSQL 15, права на запись в схему public по умолчанию отозваны у всех пользователей. Верните права владельцу базы 1С:
GRANT ALL ON SCHEMA public TO usr1cv8;
GRANT ALL ON ALL TABLES IN SCHEMA public TO usr1cv8;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO usr1cv8; Частые вопросы (FAQ)
Почему при создании новой базы 1С на PostgreSQL 15/16 возникает ошибка схемы?
В PostgreSQL 15+ изменена модель безопасности: непривилегированные пользователи больше не имеют права CREATE в схеме public. Необходимо явно выполнить GRANT ALL ON SCHEMA public TO <пользователь_1С>.
Чувствительны ли имена схем в PostgreSQL к регистру символов?
Да. Без кавычек имена схем автоматически приводятся к нижнему регистру. Схема MySchema и "MySchema" — это две разные схемы.
Что означает $user в параметре search_path?
Оно указывает ядру в первую очередь искать объекты в схеме с именем, совпадающим с именем текущего авторизованного пользователя.
Как удалить схему со всеми содержащимися таблицами?
Используйте команду каскадного удаления: DROP SCHEMA schema_name CASCADE; (внимание: удалит все объекты внутри схемы).