PL/pgSQL 関数で計算を実行しており、その計算結果を C++ コードで使用したいと考えています。それを行う最善の方法は何ですか?
その結果をテーブルに挿入してそこから使用することはできますが、それがベスト プラクティスでどれだけうまくいくかはわかりません。また、にメッセージを送信できますが、コードstderr
でRAISE NOTICE
そのメッセージを使用できるかわかりません。
PL/pgSQL 関数で計算を実行しており、その計算結果を C++ コードで使用したいと考えています。それを行う最善の方法は何ですか?
その結果をテーブルに挿入してそこから使用することはできますが、それがベスト プラクティスでどれだけうまくいくかはわかりません。また、にメッセージを送信できますが、コードstderr
でRAISE NOTICE
そのメッセージを使用できるかわかりません。
ここでの詳細は地面に少し薄いので、確実に言うのは難しいです.
可能な限り、関数の戻り値を直接取得することを強くお勧めします。SELECT my_function(args)
単一の結果を返すSELECT * FROM my_function(args);
場合、または行または行のセットを返す場合。次に、他のクエリ結果と同様に結果を処理します。これは、単純な SQL および PL/PgSQL 関数の基本的な使い方の一部です。
その他のオプションは次のとおりです。
refcursor を返します。これは、動的な結果セットまたは複数の結果セットを返したい場合に役立ちますが、現在はほとんどが and に取って代わられRETURN QUERY
てRETURN QUERY EXECUTE
います。次にFETCH
、refcursorから結果行を取得します。
LISTEN
イベントを処理し、作業が完了したときに機能を持ちNOTIFY
、結果を通知ペイロードとして使用する可能性があります。これは、結果を使用するプログラムと同じ接続で関数が呼び出されるとは限らない場合に役立ちます。
関数内に一時テーブルを作成してSELECT
から、関数を呼び出したセッションのテーブルから作成します。
RAISE
および設定を介してログメッセージを発行client_min_messages
し、それらを受信してから処理します。これは非常に醜い方法であり、絶対に避けるべきです。
INSERT
結果を既存の非一時テーブルにSELECT
入れ、トランザクションがコミットされ、行が他のトランザクションから見えるようになったら、それらを取り出します。
どちらが良いですか?それはあなたが何をしようとしているのかに完全に依存します。ほとんどの場合、正しいことは関数を呼び出して戻り値を処理することですが、特殊な場合には例外があります。