LoginSignup
23
23

More than 5 years have passed since last update.

heroku で利用中の DB データサイズ

Last updated at Posted at 2012-08-23

を取得する方法が知りたいのだけれど、heroku info コマンドでは欲しい値が得られない。heroku が提供するデータベースの無料領域は <del> 5MB というあまりにも貧弱な容量なので、このままでは安心して遊べない。</del> 現在の PostgreSQL : Dev Plan では "10,000 row limit" とのこと。

そこで見つけたエントリ herokuでのWebアプリ開発と運用(その4:データサイズ肥大化の対処)

heroku run console 後に下記を実行して ( 実際には一行 )

ActiveRecord::Base.connection.select_all(
  "SELECT relname, relkind, to_char(reltuples, '999,999,999') as rows,
   to_char(pg_relation_size(relname), '999,999,999,999')
   as bytes FROM pg_class 
   WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname='public');"
).each{|i|
  puts "#{i['relname'].ljust(30)}#{i['bytes'].rjust(15)}bytes#{i['rows'].rjust(10)}rows"
}

試してみるものの

PG::Error: ERROR:  function pg_relation_size(name) does not exist
LINE 1: ...o_char(reltuples, '999,999,999') as rows, to_char(pg_relatio...                                                             ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

叱られる。
どうやら PostgreSQL ではバージョンによってキャストまわりの仕様が異なるらしい。
8.3 以降では明示的なキャストが必要 とのこと。

ということで先ほどの relname という引数は relname::text に変えてやれば大丈夫。

ActiveRecord::Base.connection.select_all(
  "SELECT relname, relkind, to_char(reltuples, '999,999,999') as rows,
   to_char(pg_relation_size(relname::text), '999,999,999,999')
   as bytes FROM pg_class 
   WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname='public');"
).each{|i|
  puts "#{i['relname'].ljust(30)}#{i['bytes'].rjust(15)}bytes#{i['rows'].rjust(10)}rows"
}

これで無事に必要な値が得られた。

schema_migrations          8,192bytes           0rows
unique_schema_migrations   16,384bytes          0rows
hoges_id_seq               8,192bytes           1rows
hoges                      8,192bytes           2rows
hoges_pkey                 16,384bytes          2rows

めでたし。

23
23
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23