首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从PgSQL DB获取计时

如何从PgSQL DB获取计时
EN

Stack Overflow用户
提问于 2016-03-10 09:10:17
回答 2查看 187关注 0票数 3

我正在尝试使用pg gem获取查询的时间。我看了文档,但我什么也没找到。我想知道有没有像query.time这样的东西。

我在~/.psqlrc中添加了\timing,因此该命令在默认情况下处于活动状态。如果我在Postgres控制台中编写查询,则时间是活动的。

代码如下:

代码语言:javascript
复制
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类。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-10 09:25:37

尝试这个方法,因为它应该会返回时间。

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

票数 3
EN

Stack Overflow用户

发布于 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。

要获得正确的执行时间,请使用:

代码语言:javascript
复制
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first 

要提取数值,请执行以下操作:

代码语言:javascript
复制
ActiveRecord::Base.connection.execute("EXPLAIN ANALYZE ...").values.last.first.scan( /\d+.\d+/ ).first

在行动方面,

代码语言:javascript
复制
conn = ActiveRecord::Base.connection
conn.execute('EXPLAIN ANALYZE SELECT * from some_table')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35905793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档