我们的 PostgreSQL 数据库包含一个用 PL/pgSQL 编写的函数。我可以从这样的 SQL 查询窗口很好地运行它:
BEGIN TRANSACTION;
SELECT sg_copy_form(414, 2621, 1, 1035);
ROLLBACK TRANSACTION;
但是,如果我在上面运行与 pgScript 完全相同的 SQL(例如,单击 pgAdmin 中的Execute pgScript按钮而不是Execute query),那么我会收到以下错误:
[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 函数?
如果相关:我正在使用 pgAdmin III 1.12.2 在 PostgreSQL 8.3.14 上尝试这个。
编辑:我尝试按照 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