Оболочка внешних данных Postgresql вызывает ошибку при извлечении любых данных внешней таблицы из SQL Server

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

DB #: 4075 error:
Оператор базы данных USE завершился неудачно, так как параметры сортировки базы данных Person_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, но escape-символ обратной косой черты, такой как 'select from where ssn = \'1234\'', не работает и дает синтаксическую ошибку.

Любая помощь будет оценена.


person fatemeh poormohammad    schedule 06.04.2019    source источник


Ответы (2)


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

person MarcinJ    schedule 06.04.2019

согласно этой проблеме https://github.com/tds-fdw/tds_fdw/issues/56 Я думаю, что у пользователя 'bpms' нет прав доступа к вашей таблице.

person parisa rashidiNezhad    schedule 09.09.2020
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. – Из обзора - person Pranav Hosangadi; 09.09.2020