PostgreSQL 函数不存在

Posted

技术标签:

【中文标题】PostgreSQL 函数不存在【英文标题】:PostgreSQL function does not exist 【发布时间】:2014-12-16 04:56:35 【问题描述】:

我正在使用 SQL 查询,它使用与此类似的自定义编写函数

CREATE OR REPLACE FUNCTION per_cont(myarray integer[], percentile real)

这在 pgAdmin 工具中完美运行,但是当我在我的 java 应用程序中使用此查询时,它给了我一个错误:

function per_cont(integer[], real) does not exist

我正在使用 JDBI 库与数据库进行交互。为什么从 java 应用程序运行时找不到函数?我该如何解决?

【问题讨论】:

您很可能没有连接到您认为的同一个数据库。 我也想过是不是我犯了这个错误,但检查了几次。在JDBI中是需要外部导入postgresql函数,还是这个库会自动识别函数? 如何你是如何“使用”这个功能的?显然,您必须提供触发错误消息的命令。并确保提供完整的错误信息。还有你的 Postgres 版本(总是)。 【参考方案1】:

对于您显示的CREATE OR REPLACE FUNCTION 命令,错误消息完全没有意义。假设您实际上是在 DML 语句中调用函数,例如

SELECT per_cont('1,2,3', 1);

显然您必须使用相同的数据库,但您说已经建立。

您的search_path 也必须匹配。由于您没有明确提供模式,因此该函数在创建时在“当前”模式中创建。相同的架构必须显示在另一个会话的search_path 中,否则该功能不可见。

链接答案中的详细说明:

How does the search_path influence identifier resolution and the "current schema"

【讨论】:

以上是关于PostgreSQL 函数不存在的主要内容,如果未能解决你的问题,请参考以下文章

postgreSQL 中不存在函数.. 为啥?

PostgreSQL 函数不存在

postgresql函数错误:列名不存在

函数 corr(双精度, 双精度) 不存在 -- PostgreSQL

在 Java 中,调用 PostgreSQL 函数,为啥我收到一个错误,通知该函数不存在?

postgresql 中不存在函数 min(uuid)