0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

テーブルカラム追加で、データを簡単に加工しつつ追加したい

Last updated at Posted at 2018-08-06

こんなテーブルが既にあって、

id file_path
1 reports/48/1531826234/output.pdf
2 reports/48/1531826588/output.pdf

ここで dir_prefix というカラムがやはり欲しくなったので not NULL で追加したい。
かつ中身は file_path から引っ張ってきたい。
という時の migration の書き方を考えた。

  1. null: false のカラムは NULL の状態では作れないよ(それはそう)
  2. default: 0 とかもやりたくない
  3. 既存のレコードには、別カラムのデータを超簡単に加工して突っ込みたい。
    rake にコンバート処理を書いて後から流してもいいけれども、リリース後の手作業を減らしたいし、正しいデータが入るまでに時間差が発生する

ということで、postgresql の文字列関数を使った。

class AddDirPrefixToReports < ActiveRecord::Migration
  add_column    :reports, :dir_prefix, :string
  change_column :reports, :dir_prefix, "VARCHAR USING split_part( CAST(file_name as VARCHAR), '/', 3 )"
  change_column :reports, :dir_prefix, :string, null: false
end

実行するとデータが入った状態で not NULL のカラム追加ができている。

id file_path dir_prefix
1 reports/48/1531826234/output.pdf 1531826234
2 reports/48/1531826588/output.pdf 1531826588

基本的には migration にはデータのコンバートを含めない派ですが、
例外としてこの程度であればメリットが大きいと感じます。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?