PostgreSQLにアクセスすると「ポータル"C_2"は存在しません 」のエラーが発生します

PostgreSQLにアクセスする際に「ポータル"C_2"は存在しません 」のようなエラーが発生することがあります。

PostgreSQLにおけるポータル(カーソル)の動作が関係しており、RDBGetコンポーネントを起点としたループ中のRDBPutコンポーネントでコミットした時点でポータルもクローズされるため、次のループのRDBGetコンポーネントでポータルがないというエラーになるというものです。

下記解決方法のうちいずれか適したものを選択してください。

  1. フローをトランザクション化する
    フローをトランザクション化するとRDBPutコンポーネントでコミットは発生せず、トランザクション終了時(通常リクエスト終了時)にコミットされるようになりますので、結果的に回避されます。
    ※ただしエラー等の発生時などに、ロールバックされ変更内容が反映されなくなりますのでご注意ください。

  2. RDBGetコンポーネント、RDBPutコンポーネントそれぞれのDBコネクションを分別する
    トランザクションはそれぞれ独立したものとなりますので、互いに影響することなく、回避されます。

  3. RDBGetコンポーネントの「フェッチサイズ」を0にする
    この場合、PostgreSQLはポータルを使用しない動作になるようですので、回避されます。
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

このセクションの記事

他のキーワードで検索する