PostgreSQLデータベースには、PL/pgSQLで記述された関数が含まれています。次のようなSQLクエリウィンドウから問題なく実行できます。
BEGIN TRANSACTION;
SELECT sg_copy_form(414, 2621, 1, 1035);
ROLLBACK TRANSACTION;
ただし、上記のpgScriptとまったく同じSQLを実行すると(たとえば、クエリの実行ではなく、 pgAdminの[ pgScriptの実行]ボタンをクリックすると)、次のエラーが発生します。
[QUERY ] BEGIN TRANSACTION
[WARNING ] SELECT sg_copy_form(414, 2621, 1, 1035)
ERROR: function sg_copy_form(integer, integer, integer, integer) does not exist
LINE 1: SELECT sg_copy_form(414, 2621, 1, 1035)
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
[QUERY ] ROLLBACK TRANSACTION
どうしてこれなの?pgScriptからPL/pgSQL関数を呼び出すことは可能ですか?
関連する場合:私はこれをPostgreSQL8.3.14とpgAdminIII1.12.2で試しています。
編集:私は次のように、Eelkeによって提案された関数の名前を完全に修飾しようとしました:
BEGIN TRANSACTION;
SELECT db_dev.public.sg_copy_form(414, 2621, 1, 1035);
ROLLBACK TRANSACTION;
通常のSQLクエリとして実行しても正しく機能しますが、pgScriptとして実行すると別のエラーメッセージが表示されるようになりました。
[QUERY ] BEGIN TRANSACTION
[WARNING ] SELECT db_dev.public.sg_copy_form(414, 2621, 1, 1035)
ERROR: cross-database references are not implemented: db_dev.public.sg_copy_form
[QUERY ] ROLLBACK TRANSACTION