レコードをテーブルに挿入する関数をデータベースに作成しました。この関数は 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');
これが失敗する理由と修正に関する提案は誰にもありますか?
ありがとう!