如何从 PgSQL DB 获取时间

How to get timing from the PgSQL DB

我正在尝试使用 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 的时间 class。

尝试一下 return 时光倒流。

puts conn.exec("EXPLAIN ANALYZE SELECT * FROM some_table").values

虽然 PGconn.open(:dbname => 'my_db')conn.exec 似乎有效,但它没有正确报告执行时间。我怀疑它报告了查询以外的其他内容的执行时间。可能是EXPLAIN的执行时间。

虽然问题没有指定 Rails,但我怀疑使用 PGconn 而不使用 Rails 也会有同样的问题。

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')