是否可以使用Postgresql的Explain来分析Grails GORM生成的查询

时间:2011-11-03 17:14:14

标签: sql hibernate postgresql grails gorm

我发现并使用了一个临时将hibernate.SQL日志记录转换为Trace的闭包,以便我可以看到生成的确切查询。但是我希望能够自动运行PostgresQL的解释,而不必单独提取查询进行分析。

日志记录关闭: (见http://www.intelligrape.com/blog/2011/10/21/log-sql-in-grails-for-a-piece-of-code/

 public static def execute(Closure closure) {
    Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
    Logger transactionLogger = Logger.getLogger("org.hibernate.transaction");
    Level currentLevel = sqlLogger.level
    Level transLevel = transactionLogger.level
    sqlLogger.setLevel(Level.TRACE)
    transactionLogger.setLevel(Level.TRACE)
    def result = closure.call()
    sqlLogger.setLevel(currentLevel)
    transactionLogger.setLevel(transLevel)
    result
}

用法:

def result
    execute{
        result=Dog.createCriteria().list{
            eq("breed","Greyhound")
        }
    }

我想要一些可以类似方式使用的东西。

这是我可以用Criteria或Hibernate.Restrictions的子类做些什么吗?

或者在文档中是否有一些关于如何修改从GORM发送到数据库的SQL语句的内容?

感谢您的任何信息。

1 个答案:

答案 0 :(得分:3)

假设您不希望所有查询,但只有较长时间运行的查询,您可能会发现PostgreSQL的“自动解释”加载项很有用。

http://www.postgresql.org/docs/9.1/static/auto-explain.html