はじめに
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」を使えばいいですね。