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