Как настроить подключение внешнего источника данных 1С к PostgreSQL в Linux?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции систем часто возникает необходимость связать информационную базу 1С со сторонними базами данных под управлением СУБД PostgreSQL. В среде Linux эта задача решается с помощью механизма внешних источников данных и диспетчера драйверов unixODBC. Однако при первой попытке настроить соединение разработчики нередко сталкиваются с ошибкой ODBC SQLSTATE: IM002 [unixODBC][Driver Manager] Data source name not found, and no default driver specified. Разберем по шагам, почему возникает эта ошибка и как правильно настроить связку 1С, unixODBC и PostgreSQL на сервере под управлением Linux.

Причины возникновения ошибки IM002

Проанализируем ситуацию: сообщение Data source name not found, and no default driver specified означает, что диспетчер ODBC-драйверов операционной системы не смог найти зарегистрированный драйвер с именем, указанным в параметре Driver={...}, либо в системе отсутствует настроенный системный источник данных (DSN). В большинстве случаев это происходит по двум причинам: в операционной системе не установлен пакет драйвера PostgreSQL ODBC или в системном конфигурационном файле /etc/odbcinst.ini не прописана секция с описанием параметров драйвера.

Шаг 1. Установка необходимых пакетов в Linux

Для работы внешних источников данных 1С на базе дистрибутивов Ubuntu/Debian нам понадобятся диспетчер unixODBC, утилиты администрирования и сам драйвер PostgreSQL ODBC. Выполним установку необходимых пакетов через терминал:


sudo apt-get update
sudo apt-get install unixodbc unixodbc-bin unixodbc-dev odbcinst odbc-postgresql

Пакет odbc-postgresql содержит необходимые разделяемые библиотеки драйвера — версию ANSI (psqlodbca.so) и версию Unicode (psqlodbcw.so). Для корректной работы с русскоязычными строками и платформой 1С:Предприятие 8 всегда следует использовать версию Unicode.

Шаг 2. Регистрация драйвера в odbcinst.ini

После установки пакетов пропишем драйвер в глобальном конфигурационном файле /etc/odbcinst.ini. Откроем файл для редактирования с правами суперпользователя:

sudo nano /etc/odbcinst.ini

Добавим в файл описание секции драйвера Unicode (название секции в квадратных скобках будет использоваться в строке подключения 1С):


[PostgreSQL-U]
Description = PostgreSQL ODBC driver (Unicode version)
Driver      = /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
Setup       = /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so
Debug       = 0
CommLog     = 0
UsageCount  = 1

Обратите внимание: пути к файлам psqlodbcw.so и libodbcpsqlS.so могут отличаться в зависимости от архитектуры и версии дистрибутива. Проверить их точное расположение в файловой системе можно с помощью команды find /usr/lib -name psqlodbcw.so.

Шаг 3. Настройка внешнего источника данных в конфигураторе 1С

Теперь перейдем в конфигуратор 1С и настроим подключение без создания предварительного DSN (Direct/DSN-less connection):

  1. В дереве метаданных перейдем в ветку Внешние источники данных и добавим новый объект.
  2. В свойствах источника данных нажмем Строка соединения и укажем параметры подключения: DRIVER={PostgreSQL-U};Database=BazaTest;Server=192.168.1.100;Port=5432; где DRIVER={PostgreSQL-U} — точное имя секции, заданное в /etc/odbcinst.ini (с учетом регистра), Database — имя базы данных, а Server — IP-адрес или DNS-имя сервера PostgreSQL.
  3. Установим переключатель Тип СУБД в значение PostgreSQL.
  4. Установим флаг Использовать стандартную аутентификацию в значение Истина и укажем логин и пароль пользователя СУБД.
  5. Нажмем ОК, развернем ветку Таблицы, нажмем кнопку Добавить и выберем нужные таблицы из появившегося списка внешнего источника.

Шаг 4. Определение имен физических таблиц в базе данных

Если внешний источник данных подключается к базе данных, созданной платформой 1С, имена таблиц в СУБД будут иметь технический вид (например, _reference128 для справочника или _document250 для документа). Чтобы быстро сопоставить объекты метаданных и физические таблицы в PostgreSQL, выполним встроенную функцию платформы ПолучитьСтруктуруХраненияБазыДанных():


&НаСервере
Процедура ОпределитьИменаТаблицНаСервере()
    
    // Получаем таблицу значений со списком всех таблиц и полей базы данных
    ТаблицаХранения = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
    
    // Результат можно проанализировать через отладчик или выгрузить в отчет
    Для Каждого СтрокаТаблицы Из ТаблицаХранения Цикл
        ИмяОбъектаМетаданных = СтрокаТаблицы.ИмяТаблицыХранения;
        ИмяВБазеДанных       = СтрокаТаблицы.ИмяТаблицы;
    КонецЦикла;
    
КонецПроцедуры

Диагностика и частые ошибки при настройке

Разберем типичные проблемы, которые могут возникнуть в процессе эксплуатации:

  1. Разделение среды разработки и сервера: при добавлении таблиц через конфигуратор опрос драйверов выполняется на той машине, где запущен сам конфигуратор. Если разработка ведется на Windows-клиенте, а сервер 1С работает на Linux, драйвер PostgreSQL ODBC должен быть установлен и зарегистрирован на обеих операционных системах.
  2. Проверка путей конфигурации ODBC: команда odbcinst -j в консоли Linux показывает актуальные пути к файлам odbcinst.ini и odbc.ini. Убедимся, что изменения внесены именно в те файлы, которые считывает система.
  3. Проверка зависимостей библиотек: если драйвер зарегистрирован, но выдает ошибку загрузки модуля, проверим наличие всех библиотек командой ldd /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so. В выводе не должно быть записей not found.
  4. Тестирование соединения из консоли: проверить корректность работы драйвера и сетевой доступ к PostgreSQL без запуска 1С можно с помощью утилиты isql из состава пакета unixodbc-bin:
    
    isql -v -k "DRIVER={PostgreSQL-U};Server=192.168.1.100;Port=5432;Database=BazaTest;Uid=postgres_user;Pwd=secret_pass;"
    
  5. Права доступа: файлы /etc/odbcinst.ini и сами библиотеки *.so должны иметь права на чтение для пользователя ОС, от имени которого запущен сервер 1С (по умолчанию usr1cv8).
← На главную