我在PostgreSQL中存储了函数,其中有PL/PGSQL
这样的语句:
raise notice 'Message text';
我也有Groovy应用程序,它使用默认的Sql
类来调用此函数。我想从函数中获取消息(引发通知),这些消息显示在stdout中或登录到Groovy应用程序中。
我创建了PoC项目来对此进行测试:https://github.com/lospejos/groovy-jdbc-get-server-messages
请在Groovy文件https://github.com/lospejos/groovy-jdbc-get-server-messages/blob/master/call_db_function.groovy中找到注释
我还发现了这一点:https://stackoverflow.com/a/23087861/1828296
但是我无法从Statement
实例中获取Sql
对象。
答案 0 :(得分:0)
为了他人的利益。要从存储的函数中获取服务器消息,请像这样调用SQL:
def sql = Sql.newInstance('jdbc:postgresql://localhost/postgres', 'postgres', 'postgres')
final String paramValue = "Param value"
sql.query("select * from testme(param => :paramValue)", [paramValue: paramValue]) { resultSet ->
def rsRows = [:]
while (resultSet.next()) {
rsRows << resultSet.toRowResult()
}
def warning = resultSet.getStatement().getWarnings()
while (warning) {
println "[${LocalDateTime.now()}] [${warning.getSQLState()}] ${warning.message}"
warning = warning.nextWarning
}
println rsRows
}
我还更新了存储库代码。