Оболочка посторонних данных Postgresql вызывает ошибку при извлечении любых данных сторонней таблицы из SQL Server - PullRequest
1 голос
/ 06 апреля 2019

Я установил стороннюю оболочку данных в postgresql, используя freetds для подключения к SQL Server, и установил расширение tds_fdw в postgresql, но при выборе данных из сторонней таблицы код всегда вызывает ошибку DB-Library:

DB #: ошибка 4075:
Оператор базы данных USE не выполнен, так как сортировка базы данных Persian_100_CI_AI не распознается более старыми драйверами клиента.Попробуйте обновить клиентскую операционную систему или применить обновление службы к клиентскому программному обеспечению базы данных или использовать другое сопоставление.См. Электронную документацию по SQL Server для получения дополнительной информации об изменении параметров сортировки

Я углубляюсь в файл net и config freets.conf, расположенный в /etc/freetds

[global]
        # TDS protocol version
;       tds version = 8.0

        # Whether to write a TDSDUMP file for diagnostic purposes
        # (setting this to /tmp is insecure on a multi-user system)
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff

        # Command and connection timeouts
;       timeout = 10
;       connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.
        # Try setting 'text size' to a more reasonable limit
        text size = 64512
        client charset = UTF-8
# A typical Sybase server
[egServer50]
        host = symachine.domain.com
        port = 5000
        tds version = 5.0

# A typical Microsoft server
[mssql]
        host = 192.168.x.x
        port = 1433
        tds version = 7.1

, вот мой код sql вpostgres

CREATE SERVER prs_server
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername '192.168.x.x', port '1433',database 'prs_bpms', tds_version '7.1', msg_handler 'notice');

CREATE USER MAPPING FOR postgres
SERVER prs_server
OPTIONS (username 'bpms', password 'xxxx');

CREATE FOREIGN TABLE prs_table (
    FirstName varchar null,
       LastName varchar nuul,
       SSN varchar not null

)
SERVER prs_server 
OPTIONS (query 'SELECT top 10 [FirstName],[LastName],[SSN] FROM [dbo].[prs_Personnel] ');


SELECT * FROM prs_table;

А также мне нужно использовать оператор where, но экранирующий символ обратной косой черты, такой как 'select from where ssn = \'1234\'', не работает и выдает синтаксическую ошибку.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 апреля 2019

Согласно этой проблеме github , вам нужно использовать tds_version по крайней мере 7.3 для успешного подключения.Попробуйте изменить его в своем CREATE SERVER утверждении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...