Help us understand the problem. What is going on with this article?

PostgreSQLのOLEDB接続は使用しない方がいい

More than 3 years have passed since last update.

はじめに

2013年ぐらいにIIS + レガシーASP + Oracle10gの業務システムをノートPCのみ(スタンドアローン版)で海外でも動作できるようにデータベースをPostgreSQL9.2.4に改修があり、同僚が担当しました。
※PostgreSQLの接続には、OLEDBドライバー PgOleDb 1.0.0.20を使用

改修はしたものの結局使用されることなく数年が経ち、最近になりスタンドアローン版を使用してみたいという企画が出てきて、ノートPCにスタンドアローン版を導入して動作検証することになりました。

動作が遅い

ノートPCにスタンドアローン版の業務システムを導入してみたものの、動作が遅いということで何が原因なのか調査することになりました。

先ずは計測ということで、実行するSQLと処理時間をファイル出力する仕組みを作成しました。
すると特定のSQLが遅いわけでもなく、各SQLが100ms以上かかっておりトータルして遅いことが分かりました。PGAdminで各SQLを実行すると10msほどで処理が終わるので10倍は遅いってことです。ノートPC固有の環境が悪さしている可能性もあったので、別のPCに導入してみましたが結果は同じでした。

ODBCドライバーに変更

PostgreSQLの接続にOLEDBドライバー PgOleDb 1.0.0.20を使用していたので、先ずはODBC接続ドライバーを下記サイトからインストール(psqlodbc_09_02_0100.zip)して変更してみました。
https://www.postgresql.org/ftp/odbc/versions/msi/
すると各SQLが10msで処理が終わり、本来の業務システムとして正常な速度になりました。

参照:ExcelからPostgreSQLにODBC接続してピボットテーブルを作成する

別のOLEDBドライバーを試す

別のOLEDBドライバーの「PM PostgreSQL OLEDB」も試してみたのですが、PgOleDbより少し速い程度でやはり遅い上に、PgOleDbでもODBCでもエラーにならなかった部分(numericの値)が正常に取得できないなど問題があったので止めました。

最後に

PgOleDbでは、「PostgreSQLのnumeric型フィールド値がうまく取得できない」という問題もあるので、ADOやExcelなどでPostgreSQLを使用したい場合は、ODBC接続ドライバーを使用した方がいいでしょう。
.NETの場合は.NETライブラリ「Npgsql」を使えばいいですね。

yaju
静岡県島田市在住のシニアSEがコンピューター、機械学習、Unity、数学について考える
http://yaju3d.hatenablog.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした