Ruby PG 已提交 SQL

Ruby PG Submitted SQL

我正在寻找一种 PG 方法 returns 实际提交 SQL 查询到数据库。我已将此 params 语句发送到数据库:

resclose = conn.exec_params( %q{ SELECT * FROM alpha WHERE alpha.pname ILIKE  ORDER BY id}, [submitted] )

这是一个简单的查询,带有一个名为 submitted 的参数。我的其他一些陈述要复杂得多。我想在数据库客户端中测试实际的 SQL 语句,看看我得到了我想要的东西。

PG有我可以使用的方法吗?我似乎找不到 returns 实际查询的任何内容。

注意:PG 是 gem,并不意味着 postgresqlPG is here

没办法,因为conn.exec_params是原生的C实现,返回的对象PG::Result也没有办法显示SQL。如果您真的想查看查询,可以在您的 postgress 配置中打开语句日志记录并查看它

不过,您可能会尝试查看错误常量中是否有您可能会使用的信息,但您必须强制执行错误才能获取它(请注意,我更改了 table在 alpha_non_existent 的查询中强制出错):

begin
    resclose = conn.exec_params( %q{ SELECT * FROM alpha_non_existent WHERE pname ILIKE  ORDER BY id}, [submitted] )
rescue PG::Error => err
    p [
        err.result.error_field( PG::Result::PG_DIAG_SEVERITY ),
        err.result.error_field( PG::Result::PG_DIAG_SQLSTATE ),
        err.result.error_field( PG::Result::PG_DIAG_MESSAGE_PRIMARY ),
        err.result.error_field( PG::Result::PG_DIAG_MESSAGE_DETAIL ),
        err.result.error_field( PG::Result::PG_DIAG_MESSAGE_HINT ),
        err.result.error_field( PG::Result::PG_DIAG_STATEMENT_POSITION ),
        err.result.error_field( PG::Result::PG_DIAG_INTERNAL_POSITION ),
        err.result.error_field( PG::Result::PG_DIAG_INTERNAL_QUERY ),
        err.result.error_field( PG::Result::PG_DIAG_CONTEXT ),
        err.result.error_field( PG::Result::PG_DIAG_SOURCE_FILE ),
        err.result.error_field( PG::Result::PG_DIAG_SOURCE_LINE ),
        err.result.error_field( PG::Result::PG_DIAG_SOURCE_FUNCTION ),
    ]
end