Railsなどのアプリケーションで、古いデータを保管するためのアーカイブテーブルを作りたい場合があります。
ridgepoleのスキーマ定義はrubyのDSLになっているため、以下のようにテーブル名の配列からデッドコピーのスキーマを定義できました。
["users", "a_users"].each do |tbl_name|
create_table tbl_name do |t|
t.string "name"
t.string "email", :null => false
t.timestamps
end
add_index tbl_name, ["name"]
end
これにより、オンラインテーブルのスキーマを変更する際にアーカイブテーブルが不整合になるトラブルを避けられます。
保証されていない使い方のような気もしますが、現状、PostgreSQLとの組み合わせでは、とくに問題なく動作しています。
アーカイブ処理の実装例
このスキーマ定義の例ではUserモデル(usersテーブル)に以下のようなメソッドを定義することで、AUser(a_usersテーブル)にデータを移動できます。
def archive!
AUser.create! self.attributes
self.delete
end
トランザクション
は途中でエラーが起きるとロールバックするまでロックされるため避けています。
⁋ 2017/08/02↻ 2023/10/09
Railsのマイグレーションやridgepoleの t.timestamps でタイムスタンプが自動生成されますが、デフォルト値にDBMSの時刻取得機能を使用したい場合、以下のように指定すると反映され …
RailsのPRIMARY KEY(id)はデフォルトでAUTOINCREMENT付きINTEGERですが、Rails5.1でより大きなレコード数を扱えるようBIGINTに拡張されました。
この影響で …
ridgepoleはスキーマ定義ファイルの設定をそのままRDBMSに反映できるツールです( ridgepoleのメリットと使い方 参照)。
運用中のテーブル名やカラム名をリネームしたい場合には注意が必 …
Railsのテストツールはminitestがバンドルされています。rails testコマンドがテストランナーのコマンドです。以下の指定方法をよく使いますが、さらに細かいオプションで単体ケースの実行な …
おなじみのとおり、Ruby on Railsの各モデルのidは自動生成される連番数値(INTEGER)がデフォルトです。ただ、Rails 4以降では、設定しだいでUUIDも使えます。
ある程度以上の規 …
Ruby on Railsの標準的なデータベース定義ツールはActiveRecordの”マイグレーション”です。これは、データベース定義の変更点をSQLではなくRubyスクリプトで記述し、バージョン管 …
EN contents
The standard database definition tool for Ruby on Rails is ActiveRecord’s Migration. It allows …