Наша база данных PostgreSQL содержит функцию, написанную на PL/pgSQL. Я могу запустить его просто из окна запроса SQL следующим образом:
BEGIN TRANSACTION;
SELECT sg_copy_form(414, 2621, 1, 1035);
ROLLBACK TRANSACTION;
Однако, если я запускаю точно такой же SQL, как и pgScript (например, нажимаю кнопку Выполнить pgScript в pgAdmin вместо Выполнить запрос), я получаю следующую ошибку:
[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
Почему это? Можно ли вызвать функцию PL/pgSQL из pgScript?
Если уместно: я пробую это на PostgreSQL 8.3.14 с pgAdmin III 1.12.2.
EDIT: я попытался полностью уточнить имя функции, предложенное 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
SELECT mydb.myschema.some_func(..);
никогда не может работать. Как говорится в сообщении об ошибке: ссылки между базами данных не реализованы. Вы не можете префикс имени базы данных. Вы, должно быть, ошиблись в своем редактировании. - person Erwin Brandstetter   schedule 29.02.2012