J.6. tds_fdw#
J.6. tds_fdw
J.6.1. Обзор
Версия: 2.0.5
Это внешний обработчик данных PostgreSQL, который может подключаться к базам данных, использующим протокол Tabular Data Stream (TDS), таким как базы данных Sybase и сервер Microsoft SQL.
Этот адаптер внешних данных требует библиотеку, которая реализует интерфейс DB-Library, такую как FreeTDS. Это было протестировано с FreeTDS, но не с проприетарными реализациями DB-Library.
Это должно поддерживать Tantor SE 14+.
Текущая версия еще не поддерживает JOIN push-down или операции записи.
Он поддерживает WHERE и pushdown столбцов, когда match_column_names включен.
J.6.2. Установка
Чтобы установить tds_fdw, cкачайте установочный скрипт db_extension_installer.sh и сделайте его исполняемым:
wget https://public.tantorlabs.ru/db_extension_installer.sh && \ chmod +x db_extension_installer.sh
Далее вы можете установить tds_fdw:
J.6.2.1. Локально из скачанного пакета
Скачайте пакет
tds_fdw, подходящий для вашей операционной системы, с сайта nexus-public.Выполните установку
tds_fdwс помощьюdb_extension_installer.shиз скачанного пакета:./db_extension_installer.sh \ --from-file=<path to tds_fdw package>
J.6.2.2. Автоматически из репозитория пакетов
Установите значение переменной окружения
NEXUS_URL:export NEXUS_URL="nexus-public.tantorlabs.ru"
Выполните установку
tds_fdwс помощьюdb_extension_installer.shсо следующими параметрами:./db_extension_installer.sh \ --database-type=tantor \ --database-major-version=15 \ --edition=se \ --extension=tds_fdw
J.6.3. Использование
J.6.3.1. Создание Внешнего Сервера
J.6.3.1.1. Опции
J.6.3.1.1.1. Параметры внешнего сервера, которые принимаются:
servername
Требуется: Да
По умолчанию: 127.0.0.1
Имя сервера, адрес или имя хоста удаленного сервера.
Это может быть DSN, как указано в freetds.conf. См. Поиск имени FreeTDS.
Вы можете установить этот параметр в виде списка имен серверов, разделенных запятыми, затем каждый сервер будет проверяться до тех пор, пока не удастся установить первое соединение. Это полезно для автоматического переключения на резервный сервер.
port
Требуется: Нет
Порт удаленного сервера. Это необязательно. Вместо указания порта здесь, его можно указать в freetds.conf (если servername является DSN).
database
Требуется: Нет
База данных для подключения к этому серверу.
dbuse
Требуется: Нет
По умолчанию: 0
Эта опция указывает tds_fdw подключаться непосредственно к database, если dbuse равно 0. Если dbuse не равно 0, tds_fdw будет подключаться к базе данных по умолчанию на сервере, а затем выбирать database, вызывая функцию dbuse() из DB-Library.
Для Azure, dbuse в настоящее время должен быть установлен в 0.
language
Требуется: Нет
Язык для использования в сообщениях и локаль для использования в форматах дат. FreeTDS может по умолчанию использовать us_english на большинстве систем. Вы, вероятно, также можете изменить это в freetds.conf.
Для получения информации, связанной с этим для MS SQL Server, см. SET LANGUAGE в MS SQL Server.
Для получения информации, связанной с Sybase ASE, см. опции входа в Sybase ASE и SET LANGUAGE в Sybase ASE.
character_set
Требуется: Нет
Клиентская кодировка, используемая для подключения, если вам нужно установить это по какой-либо причине.
Для версий протокола TDS 7.0+ соединение всегда использует UCS-2, поэтому этот параметр ничего не делает в этих случаях. См. Локализация и TDS 7.0.
tds_version
Требуется: Нет
Версия протокола TDS для использования с этим сервером. См. Выбор версии протокола TDS и История версий TDS.
msg_handler
Требуется: Нет
По умолчанию: blackhole
Функция, используемая для обработчика сообщений TDS. Опции включают «notice» и «blackhole». С опцией «notice» сообщения TDS преобразуются в уведомления Tantor SE. С опцией «blackhole» сообщения TDS игнорируются.
fdw_startup_cost
Требуется: Нет
Затраты, используемые для представления накладных расходов на использование этого FDW, используемого при планировании запросов.
fdw_tuple_cost
Требуется: Нет
Затраты, используемые для представления накладных расходов на извлечение строк с этого сервера, используемые в планировании запросов.
sqlserver_ansi_mode
Требуется: Нет
Эта опция поддерживается только для SQL Server. По умолчанию установлено значение «false». Установка этого параметра в «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 Server, которые явно устанавливают их в
OFF, если не настроено иначе.
J.6.3.1.1.2. Параметры внешней таблицы, принимаемые в определении сервера:
Некоторые параметры внешней таблицы также могут быть установлены на уровне сервера. К ним относятся:
use_remote_estimate
row_estimate_method
J.6.3.1.2. Пример
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');
J.6.3.2. Создание внешней таблицы
J.6.3.2.1. Опции
J.6.3.2.1.1. Принимаемые параметры внешней таблицы:
query
Требуется: Да (взаимоисключающе с table)
Строка запроса для использования при запросе внешней таблицы.
schema_name
Требуется: Нет
Схема, в которой находится таблица. Имя схемы также может быть включено в table_name, поэтому это не обязательно.
table_name
Псевдонимы: таблица
Обязательно: Да (взаимоисключающее с запросом)
Таблица на удалённом сервере для выполнения запроса.
match_column_names
Требуется: Нет
Сопоставлять ли локальные столбцы с удаленными столбцами, сравнивая их имена таблиц, или использовать порядок, в котором они появляются в наборе результатов.
use_remote_estimate
Требуется: Нет
Будем ли мы оценивать размер таблицы, выполняя некоторую операцию на удаленном сервере (как определено row_estimate_method), или будем использовать только локальную оценку, как определено local_tuple_estimate.
local_tuple_estimate
Требуется: Нет
Локально установленная оценка количества кортежей, которая используется, когда use_remote_estimate отключена.
row_estimate_method
Требуется: Нет
По умолчанию:
executeЭто может быть одно из следующих значений:
execute: Выполнить запрос на удаленном сервере и получить фактическое количество строк в запросе.showplan_all: Это получает оценочное количество строк, используя SET SHOWPLAN_ALL MS SQL Server.
J.6.3.2.1.2. Параметры столбцов внешней таблицы, которые принимаются:
column_name
Требуется: Нет
Имя столбца на удаленном сервере. Если это не установлено, предполагается, что удаленное имя столбца совпадает с локальным именем столбца. Если для таблицы параметр match_column_names установлен в 0, то имена столбцов вообще не используются, поэтому это игнорируется.
J.6.3.2.2. Пример
Использование определения 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');
Или используя определение запроса:
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');
J.6.3.3. Создание отображения пользователя
J.6.3.3.1. Опции
Параметры сопоставления пользователя, которые принимаются:
username
Требуется: Да
Имя пользователя учетной записи на удаленном сервере.
ВАЖНО: Если вы используете Azure SQL, то ваше имя пользователя для внешнего сервера должно быть в формате
username@servername. Если вы используете только имя пользователя, аутентификация не удастся.password
Требуется: Да
Пароль учетной записи на удаленном сервере.
J.6.3.3.2. Пример
CREATE USER MAPPING FOR postgres SERVER mssql_svr OPTIONS (username 'sa', password '');
J.6.3.4. Импорт иностранной схемы
J.6.3.4.1. Опции
J.6.3.4.1.1. Принимаемые параметры внешней схемы:
import_default
Требуется: Нет
По умолчанию: false
Управляет включением выражений по умолчанию для столбцов в определения внешних таблиц.
import_not_null
Требуется: Нет
По умолчанию: true
Управляет включением ограничений NOT NULL столбцов в определения внешних таблиц.
J.6.3.4.2. Пример
IMPORT FOREIGN SCHEMA dbo EXCEPT (mssql_table) FROM SERVER mssql_svr INTO public OPTIONS (import_default 'true');
J.6.3.5. Переменные
J.6.3.5.1. Доступные переменные
tds_fdw.show_before_row_memory_stats - выводить статистику контекста памяти в журнал Tantor SE перед извлечением каждой строки.
tds_fdw.show_after_row_memory_stats - выводить статистику контекста памяти в журнал Tantor SE после извлечения каждой строки.
tds_fdw.show_finished_memory_stats - выводить статистику контекста памяти в журнал Tantor SE после завершения запроса.
J.6.3.5.2. Установка переменных
Чтобы установить переменную, используйте команду SET. т.е.:
postgres=# SET tds_fdw.show_finished_memory_stats=1; SET
J.6.3.6. EXPLAIN
EXPLAIN (VERBOSE) покажет запрос, отправленный
на удаленную систему.
J.6.4. Заметки о наборах символов/кодировке
Если вы получаете ошибку, подобную этой, с MS SQL Server при работе с данными Unicode:
Примечание
Уведомление DB-Library: № сообщения: 4004, Состояние сообщения: 1, Сообщение: Данные Unicode в правиле сортировки «только Unicode» или данные ntext не могут быть отправлены клиентам, использующим DB-Library (таким как ISQL) или ODBC версии 3.7 или более ранней., Server: PILLIUM, Процесс: , Строка: 1, Уровень: ОШИБКА 16: Ошибка DB-Library: DB #: 4004, Сообщение DB: Общая ошибка SQL Server: Проверьте сообщения от SQL Server, OS #: -1, Сообщение OS: (null), Уровень: 16
Возможно, вам придется вручную установить tds version в freetds.conf на 7.0 или выше. См. Файл freetds.conf. и Выбор версии протокола TDS.
Хотя многие более новые версии протокола TDS будут использовать только USC-2 для связи с сервером, FreeTDS преобразует UCS-2 в набор символов клиента по вашему выбору. Чтобы установить набор символов клиента, можно установить client charset в freetds.conf. См. Файл freetds.conf и Локализация и TDS 7.0.
J.6.5. Зашифрованные соединения с MSSQL
Это обрабатывается FreeTDS, поэтому это нужно настроить в
freetds.conf. См.
Файл
freetds.conf и в
freetds.conf settings ищите
encryption.