10

Npgsql を使用して PostgreSQL 9.1.4 の plpgsql 関数を呼び出す C# クライアント アプリケーションがあります。この機能には非常に時間がかかるため、何らかの方法で進行状況をクライアントに報告したいと考えています。どうすればいいですか?

LISTEN/NOTIFY メカニズムはこれにぴったりのように思えますが、すべてがトランザクション内で実行され、NOTIFY イベントがトランザクションの終了まで送信されないことを除けば、これは役に立ちません。

私が試したもう1つのことは、クライアントで処理できるRAISE NOTICEですが、それらの通知でさえしばらくバッファリングされ、バッチで送信されるようです。何もないよりはましですが、理想的ではありません。それらを「フラッシュ」して、すぐにクライアントに送信する方法はありますか?

4

4 に答える 4

8
于 2012-08-15T23:40:23.710 に答える
8

RAISE NOTICE に勝るものはありません。

これらのシグナルはバッファリングされず、非同期です。アプリケーションでの通知処理に問題がある可能性があります。

于 2012-08-15T13:09:44.670 に答える
1

最も簡単な方法は、pgsql 関数を複数のサブ関数に分割し、それらをアプリケーション側で順番に呼び出して、アプリケーションのトランザクション スコープを管理することです。

于 2012-08-15T11:36:00.457 に答える
0

以下も使用できます。

EXECUTE 'COPY (SELECT ''progress: ' || progress_variable || ''') TO ''d:\progress.txt''';

関数内で現在の進行状況をテキスト ファイルに書き込みます。

于 2014-08-22T10:08:48.147 に答える