2

レコードをテーブルに挿入する関数をデータベースに作成しました。この関数は VOID を返し、VARIADIC テキスト配列を入力パラメーターとして受け取ります。データベースからローカルで関数を実行すると、期待どおりに正常に動作します。

しかし、別のデータベースから実行しようとすると、外部データ ラッパーを使用して動作せず、使用する方法に応じて異なるエラーがスローされます。

1種類の呼び出しを行う方法は次のとおりです。

SELECT dblink('pg_log', 
'SELECT public.insert_log(''usage'', ''txn'', ''dimensions'', ''test'', null, 
''pgwrapper'', ''temp_var'', null,  null, null, ''Start'', null, 
                     null, null, null);');

それはこのエラーをスローします:

タイプ record を受け入れることができないコンテキストで呼び出されたレコードを返す関数

Select dblink を PERFORM dblink に置き換えると、次のエラーが発生します。

「PERFORM」またはその付近での構文エラー

そして、試してみると、dblink_exec を選択します。

次のエラーが表示されます。

結果を返すステートメントは許可されていません

繰り返しますが、関数はローカルで呼び出してテストしたとおりに機能し、本来の機能を果たします。

これで接続を確認したところ、OKが返されました:

SELECT dblink_connect('pg_log');

これが失敗する理由と修正に関する提案は誰にもありますか?

ありがとう!

4

1 に答える 1