【问题标题】:Get Size Of Schema Using ActiveRecord使用 ActiveRecord 获取 Schema 的大小
【发布时间】:2012-11-15 12:05:24
【问题描述】:

我尝试从子域的名称中获取架构的大小.. 公共架构中的子域名称,

在控制器.rb 上

@account = Account.find_by_subdomain(params[:subdomain])
@itemlist = Account.find(:all,:select => 'subdomain')
@schemasize = ActiveRecord::Base.connection.select_rows(%q{select pg_size_pretty(CAST((SELECT SUM(pg_total_relation_size(table_schema || '.' || table_name) ) FROM information_schema.tables WHERE table_schema = '}+@itemlist.to_s+%q{') As bigint) )  As schema_size}).to_s.gsub(/\D/, '').to_i

获取 localhost:3000/namesubdomain

在命令提示符下输出

 (21.0ms)  select pg_size_pretty(CAST((SELECT SUM(pg_total_relation_size(table
_schema || '.' || table_name) ) FROM information_schema.tables WHERE table_schem
a = '[#<Account subdomain: "namesubdomain">]') As bigint) ) As schema_size

我想在命令提示符下输出,例如

   (151.0ms)  select pg_size_pretty(CAST((SELECT SUM(pg_total_relation_size(tabl
e_schema || '.' || table_name) ) FROM information_schema.tables WHERE table_sche
ma = 'namesubdomain') As bigint) ) As schema_size

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord schema multi-tenant


    【解决方案1】:

    @itemlist.to_s 会将对象呈现为字符串。由于对象实际上是一个数组,因此呈现为字符串只会输出有关数组的信息而不是内容。您可能想要的是:

    @itemlist.first.subdomain
    

    或:

    @itemlist.map(&:subdomain).join(" ")
    

    【讨论】:

    • 错误输出.. (4.0ms) select pg_size_pretty(CAST((SELECT SUM(pg_total_relation_size(table_ schema || '.' || table_name) ) FROM information_schema.tables WHERE table_schema = '#') 作为 bigint) ) 作为 schema_size
    • 显然,您的对象的默认渲染也没有定义 to_s ;) 改用 subdomain - 更新答案。
    • 非常感谢您给我上课。这很有帮助:)
    猜你喜欢
    • 2012-11-15
    • 2010-09-16
    • 1970-01-01
    • 2012-06-16
    • 2021-12-05
    • 2017-09-14
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多