前回に引き続き、PostgreSQL移行の話。
対象のシステムはクライアント側に入れたSQL Serverのストアドプロシージャからサーバ側のデータベースを直接参照する仕組みがあります。
今回はこのサーバDBをOracleからPostgreSQLに変更するので、この部分についても手直しが必要となりました。
サーバDBへの接続は事前定義が必要なリンクサーバ機能は使わず、OPENROWSET関数を用いたアドホックなもの。
OPENROWSET関数ではOLE DBデータソースの利用を前提としており、対Oracle接続では「Microsoft OLE DB Provider for Oracle」、いわゆる’MSDAORA’データプロバイダを利用していたわけですが、PostgreSQLの場合はどのドライバが一般的なのかよく分かりません。
ネイティブなOLE DBプロバイダも存在するようなのですが、試した限りではうまいこと動いてくれなかったため、よりメジャーっぽいODBCドライバ「psqlODBC」のほうを採用することに。
「Microsoft OLE DB Provider for ODBC」、いわゆる’MSDASQL’データプロバイダを使うことによって、ODBCデータソースをOLE DBデータソースとして利用することができます。
そんなわけで、Stack Builderを使ってpsqlODBCをインストールして、SQL Server 2008 R2からの接続を試みたわけですが、どうにもうまくいきません。
ちなみにクエリはこんな感じ。
select * from openrowset( 'MSDASQL', 'Driver={PostgreSQL Unicode};Server=192.168.1.1;Database=testdb;UID=userid;PWD=password', 'select * from table1;' )
エラーメッセージを見る限り、ドライバが正しく認識されていない様子。
しばし悩んだ挙句、psqlODBCのダウンロードページを見てみると、Stack Builderでインストールされたもの(9.03.0210)よりも新しいバージョン(9.03.0300-1)を発見。
試しにこちらに入れ替えて試したところ、あっさり成功。
この手の話は実際にやってみないと分からないところもあるので厄介ですが、なにかの参考にでもなれば幸いです。
コメントを残す