gpt4 book ai didi

postgresql - Groovy sql.rows 返回 org.postgresql.util.PSQLException : No hstore extension installed

转载 作者:行者123 更新时间:2023-11-29 11:47:12 24 4
gpt4 key购买 nike

我在 Grails 中使用带有命名参数的 Groovy Sql 从 Postgres 数据库中获取结果。我的语句是动态生成的,即连接起来成为最终语句,随着我的进行,参数被添加到映射中。

sqlWhere += " AND bar = :namedParam1"
paramsMap.namedParam1 = "blah"

为了可读性,我使用了 groovy 字符串语法,它允许我在多行上编写我的 sql 语句,如下所示:

sql = """
SELECT *
FROM foo
WHERE 1=1
${sqlWhere}
"""

表达式被评估为包含换行符的字符串\n:

SELECT *\n ...

当我像这样传递参数时,这不是问题

results = sql.rows(sqlString, paramsMap)

但如果 paramsMap 为空(这是因为 AND bar = :namedParam1 并不总是连接到查询中,就会发生这种情况)。然后我得到一个错误

org.postgresql.util.PSQLException: No hstore extension installed  

这似乎与问题的真实性质无关。我现在已经用 if...else 解决了这个问题

if (sqlQuery.params.size() > 0) {
results = sql.rows(sqlString, paramsMap)
} else {
results = sql.rows(sqlString.replace('\n',' '))
}

但这看起来有点奇怪(特别是因为如果我在 if 分支中也使用 replace 它就不起作用)。

我的问题是:为什么我真的会收到此错误消息,是否有更好的方法来防止它发生?

最佳答案

这肯定是 groovy.sql.SQL 实现中的错误。 rows() 方法无法处理作为 params 传递的空 ma​​p。作为解决方法,您可以对其进行测试并传递一个空的列表

def paramsMap = [:]
...
if (paramsMap.isEmpty())
paramsMap= []

问题创建于 https://issues.apache.org/jira/browse/GROOVY-8082

关于postgresql - Groovy sql.rows 返回 org.postgresql.util.PSQLException : No hstore extension installed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39245870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com