如何使用Groovy Sql从PostgreSQL函数获取服务器消息(引发通知)

时间:2019-07-11 13:02:13

标签: postgresql jdbc groovy

我在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对象。

1 个答案:

答案 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
}

我还更新了存储库代码。