未找到 HugSQL 定义的函数

Posted

技术标签:

【中文标题】未找到 HugSQL 定义的函数【英文标题】:HugSQL defined function not found 【发布时间】:2021-08-25 22:14:06 【问题描述】:

这可能会很薄,但我已经没有选择了......

我正在使用带有 hugsql 的 clojure,并且我是数据库技术的真正初学者。我正在尝试调用一个同事在数据库中定义的用户定义函数。

所以,我的问题是:在 dbeaver 等数据库软件中进行查询,我得到的结果没有问题,但是从 hugsql 运行我得到一个错误,声称它无法识别该函数。

我的 .sql 文件类似于

-- :name a-fake-name :? :1
-- :doc some fake documentation

select * from a_fake_user_defined_function(:arg1, :arg2, :arg3, :arg4, 1); 

我读过这样的查询

(ns sql.commands
  (:require [hugsql.core :as hugsql]))

(hugsql/def-db-fns "sql/file.sql")

我从 clojure 运行命令:

(def db
  :classname "org.postgresql.Driver"
   :subprotocol "postgresql"
   :subname subname
   :user user
   :password password)

(sql/a-fake-name db :arg1 "first-argument" :arg2 "second-one" :arg3 "third" :arg4 "and-forth")

我得到的错误是

ERROR: function a_fake_user_defined_function(character varying,
   character varying, character varying, character varying, integer)
   does not exist Hint: No function matches the given name and
   argument types. You might need to add explicit type casts.
   Position: 15

根据我假设的错误,我缺少一些符号或配置...有人知道我能做什么吗?

我尝试查看hugsql documentation,但没有成功。

谢谢!

PS.:我很清楚在 *** 上提供可重现的错误是一种很好的做法,但这是我的工作,我对如何重现数据库一无所知。希望这就够了……

【问题讨论】:

错误看起来像来自 pg - 那里有这个名字的函数吗?它有相同的论点吗?你能用四个 varchars 和一个在 hugsql 之外的 int 调用你的函数吗? 【参考方案1】:

正如@cfrick 所暗示的,问题出在 hugsql 文件中的参数定义上。 github issue 的贡献者也提供了答案。

问题在于它没有找到具有该名称和那些参数类型的函数。然后解决方案是使用双冒号对每个参数进行类型转换 (https://www.hugsql.org/#colon)。

【讨论】:

以上是关于未找到 HugSQL 定义的函数的主要内容,如果未能解决你的问题,请参考以下文章

包含上的 Visual Studio C++“未找到函数定义”

H2数据库用户定义的java函数类未找到

函数返回未定义而不是请求的结果

FirebaseError:使用无效数据调用函数 DocumentReference.set()。不支持的字段值:未定义(在字段名称中找到)

使用无效数据调用的函数 DocumentReference.set()。不支持的字段值:未定义(在字段 firstName 中找到)

ERROR 错误:使用无效数据调用函数 DocumentReference.set()。不支持的字段值:未定义(在字段 activityId 中找到)