rake db:schema:dump してみた

インストール

Fink で rails と activerecord をインストール。してあった。

OSX 10.3 + Fink の Ruby + Fink の PostgreSQL の環境で gem install ruby-postgres はうまくいかない。インストールはできるけどライブラリが入ってない。(もちろん postgresql-dev とか postgresql-shlibs が入ってないとかじゃない。)面倒くさいので

gem install postgres-pr

で回避1

database.yml

  • adapter はあくまで adapter であって module の名前じゃないので postgres ではなく postgresql が正解2
adapter: postgresql
  • host は URI の一部として使われるので、DB サーバの hostname は URI の hostname としての規約に従わなければいけない。
host: HOSTNAME( valid URI ? )

引っ掛かったので適当に CNAME をセットして回避。

rake

rake db_schema_dump

したら今さら何ゆってんのよ、仕方ないわね、と怒られた。正解は

rake db:schema:dump

結果

できあがった schema.rb を見てみたが、やっぱ「データとしては」使いにくいんだなと感じた。

いや何をしてたかというと、定義ファイル(ぶっちゃけちゃうと DDL となる sql)が存在しないデータベースがあるわけです。いやまぁ、作ろうと思えばすぐ作れるわけですけど、管理してないんですな。(要するに手作業で作って使い回し。当然リポジトリには入ってない。)これをメンテするのはまぁいいとします。ただ定義が外部にないので接続しないと中身分かんないわけ。3

だからまずは DDL を生成しようかと思ったんだけど、

pg_dump --schema-only

の出力はあんまり見やすくないなぁとか思い始めちゃって4。rails 入れてあったから database.yml を書いて schema dump だ! と盛り上がったはいいけど、やり慣れない作業で結構時間が掛かってしまったうえに結局「データとしては」再利用しやすいわけじゃないということにやってから気がついた。なんか database.yml みたいなものができるものだと勘違いしていたらしい。(migration 使ったことあるのに!)もちろん見やすさで言えば activerecord の schema dump の方が自動でインデント揃えたりしてくれて見やすいことは見やすい。これはこれで便利。

「データとしての利用」ってのは、例えばデータベースの一覧とかテーブルの一覧なんかを取り出して、それらに対してバッチで何か処理を加える場合を考えているんだけど、とりあえず

psql -c COMMAND

と組み合わせる方向を考えた方がいいかな5

ところで ActiveRecord って Rails の Rakefile がないとやっぱまともに使えないんすかね? 単独で使えたらもっと便利じゃねすか?

  1. Pure Ruby なので速度的には不利だけど、今回は schema dump したいだけなので速度は関係ない。 

  2. 世の中 mysql の話ばかりでいやになっちゃう。 

  3. 本番であろうが開発環境であろうがね。Excel とか Wiki に書き起こすことは当然できるんだけど、それは置いておく。eclipse を常時使ってるなら繋ぎに行って確認してパースペクティブ切り替えればいいだけっちゃいいだけです。えぇ。 

  4. 間延びしてねすか。コメント削れって? 

  5. -t -A -F " " とかしておくと加工しやすい出力を得られる。psql の外に取り出しちゃえばこっちのもの。awk や Ruby が火を噴いちゃうわけ。 

More