СУБД PostgreSQL весьма популярна среди пользователей, и причина тому — достойное качество при полной бесплатности. Высокая популярность привела к тому, что задачи на тему прямого доступа к базе PostgreSQL из 1С встречаются достаточно часто. Именно о том, как этот доступ организовать и поговорим ниже.
Подготовка
В начале нужно сказать, что все испытания проводились на ОС Windows 7 (64-bit) и Windows 10 (64-bit), а подключения производились к серверу PostgreSQL (64-bit) 9.4.2-1.1C.
Первое, что нам потребуется это установленный драйвер psqlODBC. Установить его можно либо при помощи приложения Stack Builder (которое устанавливается вместе с PostgreSQL):
Либо посетив страничку, на которой представлено множество версий нашего драйвера:
Важно! Устанавливать нужно именно psqlODBC (32 bit).
С драйвером psqlODBC (64 bit) мне не удалось подключиться к базе данных ни одним способом, ни в одной ОС. Весьма вероятно, что причина этого в моих кривых руках, но что есть, то и пишу.
Так или иначе, после установки правильной версии драйвера у нас есть несколько способов получения данных.
Подключение внешнего источника данных
Подключение базы PostgreSQL в качестве внешнего источника данных является простым и наглядным. Создаем новый внешний источник данных и добавить новую таблицу:
Затем указываем строку подключения примерно такова вида:
Driver={PostgreSQL Unicode};Server=host;Port=port;Database=db_name;Uid=user;Pwd=password;STMT=utf8
И в результате получаем список таблиц:
Отмечу, что при создании внешнего источника данных у меня не получилось использовать пользовательские источники данных, о которых ниже.
Подключение при помощи ADODB
Подключение к базе PostgreSQL и выполнение различных запросов при помощи библиотеки ADOdb выглядит приблизительно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | &НаКлиенте Процедура ЗапросКPostgreSQL(Команда) АДОСоединение = Новый COMОбъект("ADODB.CONNECTION"); АДОСоединение.Provider = "MSDASQL.1"; АДОСоединение.ConnectionString = "Driver={PostgreSQL Unicode};Server=localhost;Port=5432;Database=test;Uid=postgres;Pwd=123456;STMT=utf8"; Попытка АДОСоединение.Open(); Исключение Возврат; КонецПопытки; АДОНаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); АДОКоманда = Новый COMОбъект("ADODB.Command"); Попытка АДОКоманда.ActiveConnection = АДОСоединение; АДОКоманда.CommandText = "SELECT * FROM ""table"";"; АДОНаборЗаписей = АДОКоманда.Execute(); Исключение Возврат; КонецПопытки; КонецПроцедуры |
При этом есть возможность использовать пользовательский источник данных, который нужно сначала создать. Сделать это можно при помощи приложения ODBC Data Sources (32 бита), которое находится в панели управления (а в Windows 10 в папке «Администрирование» на панели управления). Важно использовать именно 32-х битную версию, так как каждая версия видит только «свои» драйверы. Если же, по какой-либо причине, на панели управления нет этого приложения, то его можно запустить напрямую, оно находится по адресу \Windows\SysWOW64\odbcad32.exe.
Сам процесс создания пользовательского источника данных прост:
После того как источник создан, протестирован и сохранен можно использовать строку подключения следующего вида:
Driver={PostgreSQL Unicode};data source=P2;STMT=utf8
Еще раз напомню, что вариант строки подключения с пользовательским источником данных не сработал (у меня, по крайней мере) при подключении базы PostgreSQL как внешний источник данных.
На этом все, надеюсь данная статья Вам помогла.
Загрузка...
Большое спасибо за инфу!
У х64 драйвера постгреса архитектура явно указана в имени т.е. должно быть: Driver={PostgreSQL Unicode(x64)} тогда всё работает
Разрядность клиента x64 должна совпадать с версией ODBC драйвера x64.
Пользовательские источники данных не будут видны из-под сервера (который работает от имени другого пользователя). Нужно использовать системный источник в ODBC.
Как выше заметили, важно название драйвера.
В целом, спасибо за статью.