我试图使用pg gem获取查询的时间。我看到了文档,但我没有找到任何内容。我想知道是否有像query.time
这样的东西。
我将\timing
添加到~/.psqlrc
,因此该命令默认处于活动状态。如果我在Postgres控制台中编写查询,则时间是活动的。
这是代码:
conn = PGconn.open(:dbname => 'my_db')
query=conn.exec('SELECT * from some_table')
puts query.num_tuples -> this work
puts query.time -> undefined method
我需要测量Postgres本身的时间,我不能使用Ruby的Time类。
答案 0 :(得分:3)
尝试这个,因为它应该返回时间。
puts conn.exec("EXPLAIN ANALYZE SELECT * FROM some_table").values
答案 1 :(得分:1)
尽管PGconn.open(:dbname => 'my_db')
和conn.exec
似乎可以正常工作,但是它不能正确报告执行时间。我怀疑它报告了查询之外的其他东西的执行时间。也许正是EXPLAIN的执行时间。
尽管该问题未指定Rails,但我怀疑在没有Rails的情况下使用PGconn
也会遇到同样的问题。
PGconn.open(:dbname => 'my_db')
始终报告执行时间在0.010到0.285毫秒之间。我的查询的正确执行时间约为15,000毫秒。
要获得正确的执行时间,请使用:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first
要提取数值:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first.scan( /\d+.\d+/ ).first
关于OP,
conn = ActiveRecord::Base.connection
conn.execute('EXPLAIN ANALYZE SELECT * from some_table')