Создание внешней таблицы из postgresql к mssql сервер
Коллеги, привет. Есть задача, создать внешнюю таблицу на сервере postgre, которая будет смотреть на mssql server. В интернете существует множество гайдов, построенных на решении расширения для postgres tds_fdw. Собственно:
- Клонирую репозиторий https://github.com/tds-fdw/tds_fdw и собираю из исходников
- редактирую freetds.conf и добавляю туда сервер [bi]
host = ...
port = 1433
- Подключаю расширение, создаю сервер и маппинг
CREATE EXTENSION tds_fdw;
CREATE SERVER bi1c_fdw FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername 'bi', msg_handler 'notice', database 'BI_test', tds_version '7.4');
CREATE USER MAPPING FOR cpu SERVER bi1c_fdw OPTIONS (username 'tst_user', password 'p@ssword');
CREATE FOREIGN TABLE IF NOT EXISTS fdw_bi1c.test(
test_field timestamp
) SERVER bi1c_fdw
OPTIONS (table '....');
select * from fdw_bi1c.test;
- Получаю ошибку: Logon failed for login 'tst_ssms_user' due to trigger execution
Ругается на триггер при входе. Если триггер отключить, то все работает. Но, если подключаться любы другим способом под этим же пользователем, то проблемы никакой нет. проверял и pyodbc, pycharme, managemen studio. Перебирал все возможные tds version, не помогает. Может есть мысли, куда еще посмотреть? И через odbc все так же работает, но я не понял, как переделать tds_fdw плагин на работу через кастомный odbc
Справка по тригеру: Триггер разбирает на переменные xml c данными о входе. Пример xml
<EVENT_INSTANCE>
<EventType>LOGON</EventType>
<PostTime>2022-03-23T17:15:03.750</PostTime>
<SPID>64</SPID>
<ServerName>.....\TEST</ServerName>
<LoginName>tst_user</LoginName>
<LoginType>SQL Login</LoginType>
<SID>...==</SID>
<ClientHost>....</ClientHost>
<IsPooled>0</IsPooled>
</EVENT_INSTANCE>
Разницы в двух xml при удачном (через odbc) и неудачном (через tds_fdw) входе нет.