Crystal Reports + PostgreSQL(ODBC) 環境で application_name を設定する方法
VB.NETで作成したWindowsフォームアプリケーションにて帳票作成をしています。この時、帳票作成用ライブラリのCrystal Reports から PostgreSQL に接続する際、pg_stat_activity の application_name に任意の値を設定したかったので調査したところ、ODBC の設定だけで実現できました。
同様の構成で接続元アプリケーションを識別したい方の参考になればと思います。
環境
- PostgreSQL 16
- VB.NET (.NET Framework 4.7.2)
- Crystal Reports Runtime
- PostgreSQL ODBC Driver (psqlODBC)
- Windows 11
接続コード
Crystal Reports へログイン情報を設定するコードは以下のような構成です。
Dim logOnInfo As TableLogOnInfo = New TableLogOnInfo()
logOnInfo = report.Database.Tables(table).LogOnInfo
Dim ConnectionInfo As ConnectionInfo = New ConnectionInfo()
ConnectionInfo.ServerName = server
ConnectionInfo.DatabaseName = dbName
ConnectionInfo.UserID = user
ConnectionInfo.Password = pwd
report.Database.Tables(table).ApplyLogOnInfo(logOnInfo)
report.SetDatabaseLogon(user, pwd)
report.SetDataSource(dtReport)
やりたかったこと
PostgreSQL の pg_stat_activity から、どのアプリケーションが接続しているのか識別したい。
SELECT
pid,
usename,
application_name
FROM pg_stat_activity;
例えば以下のように表示させたい。
| application_name |
|---|
| CrystalReports |
調査結果
Crystal Reports の
CrystalDecisions.Shared.ConnectionInfo
には ApplicationName のようなプロパティはありません。
そのため、
application_name=CrystalReports
のような PostgreSQL 固有の接続パラメータをコードから直接設定することはできませんでした。
解決方法
ODBC データソースの設定画面にある Connect Settings を利用します。
設定内容
SET application_name='CrystalReports';
これを設定するだけです。
設定手順
1. ODBC データソース管理ツールを起動
Crystal Reports が 32bit の場合は以下を利用します。
C:\Windows\SysWOW64\odbcad32.exe
2. PostgreSQL の DSN を編集
利用中の PostgreSQL ODBC データソースを選択し、設定画面を開きます。
3. Connect Settings に入力
SET application_name='CrystalReports';
を入力して保存します。
動作確認
帳票作成処理を実行後に PostgreSQL 側で確認します。
SELECT
pid,
usename,
application_name,
client_addr,
state
FROM pg_stat_activity;
実行結果例
pid | usename | application_name
------+---------+------------------
1234 | user | CrystalReports
無事に application_name が設定されていることを確認できました。
応用例
帳票ごとに接続元を識別したい場合は、DSN を分ける方法も有効です。
帳票A用DSN
Connect Settings
SET application_name='ReportA';
帳票B用DSN
Connect Settings
SET application_name='ReportB';
こうしておくと、PostgreSQL の監視や性能調査時にどの帳票からの接続かを容易に判別できます。
まとめ
Crystal Reports + PostgreSQL ODBC 環境では、ConnectionInfo から application_name を設定する方法は見つけられませんでした。
上手いやり方があれば是非ともご教示いただきたいです。
しかし、ODBC データソースの Connect Settings に以下を設定することで対応可能です。
SET application_name='CrystalReports';
これにより PostgreSQL の pg_stat_activity.application_name に任意の値を表示でき、接続元アプリケーションの識別がしやすくなります。