前の記事で 、同僚のDmitry Vasilievが PostgreSQLとMySQLの統合を構成する方法と、いくつかのクエリをより効率的に実行する方法を説明しました。

この記事では、Linuxを実行しているPostgreSQLをMS SQL Serverに接続する構成について説明します。 各テーブルの構造を説明せずに、特定のMS SQL ServerデータベーススキーマのすべてのテーブルをPostgreSQLにインポートする方法と同様に。
tds_fdwをインストールして構成する
Tds_fdwは、 PostgreSQLとMS SQL Serverを統合するために使用されます。 このモジュールは、 TDS (Tabular Data Stream)プロトコルを介してデータベースと通信します。 TDSは、MS SQL ServerやSybase SQL ServerなどのDBMSで使用されます。
tds_fdwをビルドしてインストールする前に、 FreeTDSライブラリをインストールする必要があります。 Ubuntuの場合、これらはfreetds-devおよびfreetds-commonパッケージです。
sudo apt-get install freetds-dev freetds-common
次に、tds_fdwをダウンロードしてビルドします(アセンブリには、インストールされたPostgreSQLとPATH環境変数のpg_configも必要です)。
git clone https://github.com/tds-fdw/tds_fdw.git cd tds_fdw make USE_PGXS=1 install
tds_fdwを使用する前に、FreeTDSを構成する必要があります。 MS SQL Serverに接続するためのFreeTDSの構成は、/ etc / freetds / freetds.confファイルを使用して実行されます。 たとえば、次のコンテンツを追加します。
[mssql01] host = 192.168.0.1 port = 1433 tds version = 7.1 instance = MSSQL01
これで、PostgreSQLに必要なオブジェクトを作成できます。
ここで、mssql01はfreetds.conf内のサーバーの名前、pguserはPostgreSQLユーザー、msuserはMS SQL Serverユーザーです。
その後、MS SQL ServerテーブルごとにPostgreSQLで外部テーブルを作成できます。 ただし、代わりにIMPORT FOREIGN SCHEMA
コマンドを使用できます。
MS SQL Serverを使用したテーブル定義のインポート
IMPORT FOREIGN SCHEMA
チームはPostgreSQL 9.5で実装されました。 oracle_fdw、mysql_fdwなどのサードパーティデータラッパーは、そのサポートを実装しました。 しかし、tds_fdwのサポートはありませんでした。
私たちのプロジェクトの1つでは、tds_fdwにもこのチームのサポートが必要でした。 チームを実装し、 プルリクエストを作成しました。 その日、開発者は喜んでそれを受け取りました。 その前に、彼らはPythonに実装されているテスト用のスクリプトを数時間で修正しました。 テストはPostgreSQL 9.2、9.3、9.4、および9.5で実行されます。 ただし、 IMPORT FOREIGN SCHEMA
コマンドはバージョン9.5でのみ追加されました。
これで、次のコマンドを実行できます。
IMPORT FOREIGN SCHEMA msschema01 FROM SERVER sql01 INTO pgschema01 OPTIONS (import_default 'true');
スキームmsschema01およびpgschema01はすでに存在している必要があります。 このコマンドは次のオプションを受け入れます。
- import_default-テーブル列を記述するときにDEFAULT式を追加するかどうか(デフォルト、false)。
- import_not_null-テーブル列を記述するときにNOT NULL制約を追加するかどうか(デフォルト、true)。
テーブル列の説明をインポートする場合、次のタイプマッピングが使用されます。
タイプマッピングテーブルタイプMS SQL Server | PostgreSQLタイプ |
---|
少し
小さい
tinyint
| 小さい
|
int
| 整数
|
ビッグ
| ビッグ
|
10進数(p [、s])
| 10進数(p [、s])
|
数値(p [、s])
| 数値(p [、s])
|
お金
小銭
| お金
|
浮く
float(n)、ここで25 <= n <= 53
| 倍精度
|
本当の
float(n)、1 <= n <= 24
| 本当の
|
日付
| 日付
|
日時
datetime2
小さい
| タイムゾーンなしのタイムスタンプ
|
日時オフセット
| タイムゾーン付きのタイムスタンプ
|
時間
| 時間
|
char(n)
nchar(n)
| char(n)
|
varchar(n)
nvarchar(n)
| varchar(n)
|
varchar(MAX)
テキスト
ntext
| テキスト
|
バイナリ
varbinary
画像
rowversion
タイムスタンプ
| バイテア
|
xml
| xml
|
したがって、tds_fdwを使用したデータ移行がはるかに簡単になり、各テーブルを個別にインポートする必要がなくなりました。
ご清聴ありがとうございました!
UPDATE型マッピングテーブルが更新されました。 現在、MS SQL Serverのrowversionおよびtimestampタイプは、PostgreSQLのbyteaタイプに対応しています( commitを参照)。
参照資料
- ダウンロードtds_fdw
- 外部データラッパーのドキュメント (en)
- 外部データラッパーのドキュメント (en)
- サードパーティのデータラッパーのリスト