H.2. tds_fdw — подключение к базам данных, использующим протокол TDS #

Модуль tds_fdw предоставляет обёртку сторонних данных tds_fdw, которая может подключаться к базам данных, использующим протокол TDS (Tabular Data Stream, поток табличных данных), например Sybase и Microsoft SQL Server.

Для этой обёртки требуется библиотека, реализующая интерфейс DB-Library, например FreeTDS. Обёртка была протестирована с FreeTDS, но не с проприетарными реализациями DB-Library.

H.2.1. Ограничения #

При включённом match_column_names поддерживаются условия WHERE и вынос столбцов наружу. Однако вынос наружу JOIN и пишущие операции не поддерживаются.

H.2.2. Установка tds_fdw #

tds_fdw поставляется вместе с Postgres Pro Standard в виде отдельного пакета tds_fdw (подробные инструкции по установке приведены в Главе 16).

Установите расширение tds_fdw с помощью команды CREATE EXTENSION.

H.2.3. Настройка tds_fdw #

H.2.3.1. Управление наборами символов/кодировкой #

Хотя многие новые версии протокола TDS для связи с сервером используют только стандарт USC-2, FreeTDS преобразует UCS-2 в клиентскую кодировку по вашему выбору. Чтобы установить клиентскую кодировку, можно задать для переменной client charset значение freetds.conf. За подробностями обратитесь к описанию The freetds.conf File (файла freetds.conf) и Localization and TDS 7.0 (локализации и TDS 7.0).

При получении указанной ниже ошибки во время работы Microsoft SQL Server с данными Unicode может потребоваться дополнительная настройка:

NOTICE: DB-Library notice: Msg #: 4004, Msg state: 1, Msg: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier., Server: PILLIUM\SQLEXPRESS, Process: , Line: 1, Level: 16

ERROR: DB-Library error: DB #: 4004, DB Msg: General SQL Server error: Check messages from the SQL Server, OS #: -1, OS Msg: (null), Level: 16

В таком случае придётся вручную указать в файле freetds.conf версию tds 7.0 или выше. За подробностями обратитесь к описанию Файла freetds.conf и Выбора версии протокола TDS.

H.2.3.2. Настройка зашифрованных подключений к MSSQL #

Такие подключения настраиваются в файле freetds.conf. Найдите "шифрование" в разделе freetds.conf settings файла freetds.conf.

H.2.4. Использование #

Чтобы обеспечить доступ к базе данных с помощью tds_fdw, выполните следующие шаги:

  1. Создайте объект стороннего сервера с помощью CREATE SERVER, который будет представлять каждую базу данных, доступную для подключения.

  2. Создайте сопоставление пользователей с помощью CREATE USER MAPPING для каждого пользователя базы данных, которому нужно разрешить доступ к каждому стороннему серверу.

  3. Создайте стороннюю таблицу с помощью CREATE FOREIGN TABLE или IMPORT FOREIGN SCHEMA для каждой таблицы, к которой нужно получить доступ.

H.2.4.1. Создание стороннего сервера #

Чтобы создать сторонний сервер, выполните команду CREATE SERVER со следующими параметрами:

servername

Имя сервера, адрес или имя узла стороннего сервера. Значением может быть DSN, как указано в freetds.conf. За подробностями обратитесь к разделу Поиск по имени FreeTDS. Можно задать в этом параметре список имён серверов, разделённый запятыми, тогда будут выполняться попытки подключиться к каждому серверу до тех пор, пока не будет установлено первое подключение. Такой список может использоваться для автоматического переключения на резервный сервер.

Обязательный: да

Значение по умолчанию: 127.0.0.1

port

Порт стороннего сервера. Вместо этого его можно указать в freetds.conf (если servername является DSN).

Обязательный: нет

database

База данных для подключения на этом сервере

Обязательный: нет

dbuse

Если dbuse равен 0, tds_fdw подключится напрямую к database. Если dbuse не равен 0, tds_fdw подключится к базе данных сервера по умолчанию, а затем выберет базу данных, вызвав функцию dbuse() библиотеки DB-Library. Чтобы использовать Azure, для dbuse необходимо установить значение 0.

Обязательный: нет

По умолчанию: 0

language

Язык, используемый для сообщений, и локаль, используемая для форматов дат. В большинстве систем для FreeTDS по умолчанию может использоваться английский (США). Вероятно, их также можно изменить в freetds.conf. За дополнительной информацией по этой настройке для MS SQL Server обратитесь к разделу SET LANGUAGE in MS SQL Server (SET LANGUAGE в MS SQL Server), а для Sybase ASE — к разделам Sybase ASE login options (Параметры входа в Sybase ASE) и SET LANGUAGE in Sybase ASE (SET LANGUAGE в Sybase ASE).

Обязательный: нет

character_set

Клиентская кодировка, которая будет использоваться при подключении. В протоколе TDS версии 7.0 и выше для подключения всегда используется UCS-2, поэтому в таких случаях этот параметр ничего не делает. За подробностями обратитесь к разделу Localization and TDS 7.0 (локализация и TDS 7.0).

Обязательный: нет

tds_version

Версия протокола TDS, которая будет использоваться для этого сервера. За подробностями обратитесь к разделам Choosing a TDS protocol version (Выбор версии протокола TDS) и History of TDS Versions (История версий TDS).

Обязательный: нет

msg_handler

Функция, используемая для обработчика сообщений TDS. Допустимо одно из следующих значений:

  • notice: сообщения TDS преобразуются в замечания PostgreSQL

  • blackhole: сообщения TDS игнорируются

Обязательный: нет

По умолчанию: blackhole

fdw_startup_cost

Стоимость, которая используется при планировании запросов для представления издержек использования этой обёртки сторонних данных.

Обязательный: нет

fdw_tuple_cost

Стоимость, которая используется при планировании запросов для представления издержек выборки строк с этого сервера.

Обязательный: нет

sqlserver_ansi_mode

Стоимость, которая используется для представления издержек выборки строк с этого сервера, используемых при планировании запросов.

Этот параметр поддерживается только для SQL Server. Установка значения true включит следующие параметры стороннего сервера после успешного подключения к нему:

  • CONCAT_NULLS_YIELDS_NULL ON

  • ANSI_NULLS ON

  • ANSI_WARNINGS ON

  • QUOTED_IDENTIFIER ON

  • ANSI_PADDING ON

  • ANSI_NULL_DFLT_ON ON

Эти параметры в целом сопоставимы с параметром SQL Server ANSI_DEFAULTS. Параметр sqlserver_ansi_mode, напротив, в настоящее время не активирует следующие параметры:

  • CURSOR_CLOSE_ON_COMMIT

  • IMPLICIT_TRANSACTIONS

Это соответствует поведению собственных драйверов ODBC и OLEDB для SQL-серверов, которые явно отключают эти параметры, если не настроено иначе.

Обязательный: нет

По умолчанию: false

Некоторые параметры сторонней таблицы также могут быть установлены на уровне сервера. К ним относятся:

Пример H.1. Создание стороннего сервера

CREATE SERVER mssql_svr
    FOREIGN DATA WRAPPER tds_fdw
    OPTIONS (servername '127.0.0.1', port '1433', database 'tds_fdw_test', tds_version '7.1');

H.2.4.2. Создание сопоставлений пользователей #

Чтобы создать сопоставление пользователя, выполните команду CREATE USER MAPPING со следующими параметрами:

username

Имя пользователя учётной записи на стороннем сервере

Важно

Если вы используете Azure SQL, имя пользователя для стороннего сервера должно быть в формате username@servername. Если используется только имя пользователя, аутентификация завершится ошибкой.

Обязательный: да

password

Пароль учётной записи на стороннем сервере

Обязательный: да

Пример H.2. Создание сопоставления пользователя

CREATE USER MAPPING FOR postgres
    SERVER mssql_svr 
    OPTIONS (username 'sa', password '');

H.2.4.3. Создание сторонней таблицы #

Чтобы создать стороннюю таблицу, выполните команду CREATE FOREIGN TABLE со следующими параметрами:

query #

Строка запроса, используемая для обращения к сторонней таблице

Обязательный: Да (взаимоисключающий с table_name)

schema_name #

Схема, в которой находится таблица. Имя схемы также можно включить в table_name.

Обязательный: нет

table_name #

Таблица на стороннем сервере, к которой выполняется запрос

Псевдонимы: таблица

Обязательный: Да (взаимоисключающий с query)

match_column_names #

Сопоставить локальные столбцы с удалёнными, сравнивая их имена в таблицах вместо использования порядка, в котором они появляются в наборе результатов. Требуется для WHERE и выноса столбцов наружу.

Обязательный: нет

use_remote_estimate #

Оценить размер таблицы, выполнив какую-нибудь операцию на удалённом сервере, как определено в row_estimate_method, вместо использования локальной оценки, как определено в local_tuple_estimate

Обязательный: нет

local_tuple_estimate #

Локально заданная оценка количества кортежей, которая используется, когда отключён параметр use_remote_estimate

Обязательный: нет

row_estimate_method #

Может принимать одно из следующих значений:

  • execute: выполнить запрос на удалённом сервере и получить фактическое количество строк в запросе

  • showplan_all: получить оценку количества строк с помощью MS SQL Server SET SHOWPLAN_ALL

Обязательный: нет

По умолчанию: execute

Пример H.3. Создание сторонней таблицы

Использование определения table_name:

CREATE FOREIGN TABLE mssql_table (
    id integer,
    data varchar)
    SERVER mssql_svr
    OPTIONS (table_name 'dbo.mytable', row_estimate_method 'showplan_all');

Использование определений schema_name и table_name:

CREATE FOREIGN TABLE mssql_table (
    id integer,
    data varchar)
    SERVER mssql_svr
    OPTIONS (schema_name 'dbo', table_name 'mytable', row_estimate_method 'showplan_all');

Использование определения query:

CREATE FOREIGN TABLE mssql_table (
    id integer,
    data varchar)
    SERVER mssql_svr
    OPTIONS (query 'SELECT * FROM dbo.mytable', row_estimate_method 'showplan_all');

Установка имени расположенного удалённо столбца:

CREATE FOREIGN TABLE mssql_table (
    id integer,
    col2 varchar OPTIONS (column_name 'data'))
    SERVER mssql_svr
    OPTIONS (schema_name 'dbo', table_name 'mytable', row_estimate_method 'showplan_all');

H.2.4.4. Импорт сторонней схемы #

Чтобы импортировать стороннюю схему, выполните команду IMPORT FOREIGN SCHEMA со следующими параметрами:

import_default

Управляет включением выражений столбцов DEFAULT в определения сторонних таблиц

Обязательный: нет

По умолчанию: false

import_not_null

Управляет включением ограничений столбцов NOT NULL в определения сторонних таблиц

Обязательный: нет

По умолчанию: true

Пример H.4. Импорт сторонней схемы

IMPORT FOREIGN SCHEMA dbo
    EXCEPT (mssql_table)
    FROM SERVER mssql_svr
    INTO public
    OPTIONS (import_default 'true');

H.2.4.5. Задание переменных #

Чтобы задать переменную, выполните команду SET.

Доступны следующие переменные:

tds_fdw.show_before_row_memory_stats

Выводить статистику контекста памяти в журнал Postgres Pro перед выборкой каждой строки

tds_fdw.show_after_row_memory_stats

Выводить статистику контекста памяти в журнал Postgres Pro после выборки каждой строки

tds_fdw.show_finished_memory_stats

Вывести статистику контекста памяти в журнал Postgres Pro после завершения запроса

Пример H.5. Задание переменной

postgres=# SET tds_fdw.show_finished_memory_stats=1;
SET

H.2.4.6. Просмотр запроса, выданного на удалённо расположенной системе #

Чтобы просмотреть запрос, выданный в удалённо расположенной системе, выполните команду EXPLAIN [ VERBOSE ].

H.2.5. Автор #

Джефф Монти

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy