我正在尝试使用pg gem获取查询的时间。我看了文档,但我什么也没找到。我想知道有没有像query.time
这样的东西。
我在~/.psqlrc
中添加了\timing
,因此该命令在默认情况下处于活动状态。如果我在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类。
发布于 2016-03-10 09:25:37
尝试这个方法,因为它应该会返回时间。
puts conn.exec("EXPLAIN ANALYZE SELECT * FROM some_table").values
发布于 2018-07-06 07:01:46
尽管PGconn.open(:dbname => 'my_db')
和conn.exec
看起来可以工作,但它不能正确地报告执行时间。我怀疑除了查询之外,它还会报告一些东西的执行时间。也许这就是解释的执行时间。
尽管问题中没有指定Rails,但我怀疑在不使用Rails的情况下使用PGconn
也会有同样的问题。
PGconn.open(:dbname => 'my_db')
始终报告执行时间在0.010到0.285毫秒之间。我的查询的正确执行时间大约是15,000ms。
要获得正确的执行时间,请使用:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first
要提取数值,请执行以下操作:
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first.scan( /\d+.\d+/ ).first
在行动方面,
conn = ActiveRecord::Base.connection
conn.execute('EXPLAIN ANALYZE SELECT * from some_table')
https://stackoverflow.com/questions/35905793
复制相似问题