powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Работа в PostgreSQL с MSSQL через TDS FDW
11 сообщений из 11, страница 1 из 1
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131625
ronvaleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем. Помогите пожалуйста разобраться, почему не получается делать запросы на изменения из PostgreSQL в MSSQL.

Есть сервер на MS SQL 2014 и PostgreSQL 14.1.
TDS FDW настроил, запросы на чтение работают без проблем.

В файле конфига freetds.conf прописано следующее
freetds.conf[servRG]
host = 10.10.14.1
port = 1433
tds version = 7.4


Радом лежит locales.conf, без этого конфига не работали запросы SELECT, проблема с представлением типов данных Date и DateTime
locales.conf[default]
date format = %b %e %Y %I:%M:%S.%z%p


Настраивал следующим образом.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
--Создал обертку
CREATE FOREIGN DATA WRAPPER tds_fdw
    VALIDATOR public.tds_fdw_validator
    HANDLER public.tds_fdw_handler;

--Создал сервер
CREATE SERVER rusg
    FOREIGN DATA WRAPPER tds_fdw
    OPTIONS (servername '10.10.14.1', 
                   port '1433', 
                   tds_version '7.4', 
                   database 'RusGuardDB', 
                   msg_handler 'notice', 
                   language 'us_english'); --Последнюю строку добавил недавно, т.к. при выполнение UPDATE была ругань на язык.

--Сопоставил с пользователем
CREATE USER MAPPING FOR pg_user SERVER rusg
    OPTIONS (username 'user', password '123456');

--Создал внешнюю таблицу
CREATE FOREIGN TABLE IF NOT EXISTS rusg.property(
    resource_guid uuid OPTIONS (column_name '_idResource'),
    propertyname character varying(50) OPTIONS (column_name 'PropertyName'),
    propertyvalue character varying(255) OPTIONS (column_name 'Value')
)
    SERVER rusg
    OPTIONS (schema_name 'dbo', table 'Property', 
                    match_column_names '1'); --Этот параметр добавил, для сопоставления полей по именам, но он так же не помог.


Все скрипты выше успешно отрабатывают и после этого SELECT работает без проблем.
Например:
Код: sql
1.
2.
3.
4.
5.
SELECT
*
FROM rusg.property
WHERE resource_guid = 'd9148b51-2a01-4f8a-8eb6-0608e94a9bd9'
AND propertyname = 'AccumulatorControlEnabled'


Но если я пытаюсь выполнить запрос на изменение:
Код: sql
1.
2.
3.
4.
UPDATE rusg.property SET propertyvalue = 'FALSE' 
FROM rusg.property
WHERE resource_guid = 'd9148b51-2a01-4f8a-8eb6-0608e94a9bd9'
AND propertyname = 'AccumulatorControlEnabled'


То в результате получаю кучу ошибок...
PGAdmin4ЗАМЕЧАНИЕ: DB-Library notice: Msg #: 5701, Msg state: 2, Msg: Changed database context to 'RusGuardDB'., Server: SERVRG\RUSGUARD, Process: , Line: 1, Level: 0
ЗАМЕЧАНИЕ: DB-Library notice: Msg #: 5703, Msg state: 1, Msg: Changed language setting to us_english., Server: SERVRG\RUSGUARD, Process: , Line: 1, Level: 0
ЗАМЕЧАНИЕ: DB-Library notice: Msg #: 1003, Msg state: 2, Msg: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR., Server: SERVRG\RUSGUARD, Process: , Line: 1, Level: 15

ERROR: ОШИБКА: DB-Library error: DB #: 20018, DB Msg: General SQL Server error: Check messages from the SQL Server, OS #: -1, OS Msg: , Level: 15


SQL-состояние: HV00L
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131671
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ronvaleron,

Там посмотрите что за ошибки на стороне mssql происходят.
Может там прав не хватает или ещё что.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131686
ronvaleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет. Доступ есть полный. С этими учетными данными подключаюсь с SQL Manager и все работает...
Заметил еще одну проблему, тип данных uniqueidentifier в MSSQL при интерпретации в UUID PostgreSQL становится другого вида, точнее содержимого, видимо отличаются версии, на PostgreSQL v4, на MSSQL не знаю как посмотреть. Возможно проблема в этом. Но я пробовал отключить поле этого типа, всеравно не могу делать изменения.

В Oracle FDW есть подобные грабли, там на какое-нибудь поле необходимо дать OPTION key = 'true', если этого не сделать, то селекты работают, а изменение - НЕТ.
Но в TDS FDW такого свойства не нашел... Уже весь интернет перерыл, не могу найти решения...
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131708
ronvaleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Точнее генерирую UUID с помощью функции uuid_generate_v4(), а EXTENSION uuid-ossp VERSION "1.1".
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131709
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ronvaleron
Да нет. Доступ есть полный. С этими учетными данными подключаюсь с SQL Manager и все работает...
Заметил еще одну проблему, тип данных uniqueidentifier в MSSQL при интерпретации в UUID PostgreSQL становится другого вида, точнее содержимого, видимо отличаются версии, на PostgreSQL v4, на MSSQL не знаю как посмотреть. Возможно проблема в этом. Но я пробовал отключить поле этого типа, всеравно не могу делать изменения.

В Oracle FDW есть подобные грабли, там на какое-нибудь поле необходимо дать OPTION key = 'true', если этого не сделать, то селекты работают, а изменение - НЕТ.
Но в TDS FDW такого свойства не нашел... Уже весь интернет перерыл, не могу найти решения...


А readme по адресу https://github.com/tds-fdw/tds_fdw/blob/master/README.md вы вообще пробовали читать?
Особенно в части The current version does not yet support JOIN push-down, or write operations.

PS: я первый раз с TDS FDW столкнулся - нашёл за 5 минут... не знаю где вы " Уже весь интернет перерыл" перерывали... может интернет у нас разный?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131716
ronvaleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Там тоже всё читал. Насчет версии TDS я не правильно сначала делал, потом взял версию 7.0. При подключении через FreeTDS ошибок нет, через TDSVER=7.0 tsql -H 10.10.14.1 -p 1433 -U user -P 123456 все подключается, версию пишет, в конфиге 7.0.

В постгресе

CREATE SERVER rusg
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (
servername '10.10.14.1',
port '1433',
tds_version '7.0',
database 'RusGuardDB',
msg_handler 'notice',
language 'us_english');
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131718
ronvaleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The current version does not yet support JOIN push-down, or write operations.

It does support WHERE and column pushdowns when match_column_names is enabled.

Вот этот кусок я не совсем понял, можно разъяснить пожалуйста? (((
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131734
ronvaleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное плюну я на эти кастыли с FDW и пойду через plpython3u odbc буду работать с MSSQL......
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131752
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ronvaleron
The current version does not yet support JOIN push-down, or write operations.

It does support WHERE and column pushdowns when match_column_names is enabled.

Вот этот кусок я не совсем понял, можно разъяснить пожалуйста? (((


что не понятно в слове " or write operations."? tds_fdw - readonly только.
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40131918
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ronvaleron,
plpython3u - самое универсальное решение.
Python SQL Driver - pymssql
...
Рейтинг: 0 / 0
Работа в PostgreSQL с MSSQL через TDS FDW
    #40132018
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ronvaleron
Наверное плюну я на эти кастыли с FDW и пойду через plpython3u odbc буду работать с MSSQL......


"кастыли" - от английского слова castle, они так и названы, что пройти трудно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Работа в PostgreSQL с MSSQL через TDS FDW
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]