注:より新しいバージョンのRailsを使用している場合は、おそらくbrcebnの回答を見たいと思うでしょう。
Rails はこれを解釈しようとします:
t.string :uniqueid, default: md5(random()::text)
Ruby コードとしてであり、Ruby:default => md5(...)
では何の意味もありません。uniqueid
引用すると、Rails はそれを文字列と見なし、文字列のデフォルト値を作成しますが、これは'md5(random()::text)'
役に立ちません。
alter table
列のデフォルトで関数呼び出しを使用する場合は、手動で実行できます。
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
これにより、データベースに必要なデフォルトが取得されますが、新しいデフォルトについて言及されていないことに気付くかもしれませんschema.rb
。使用可能なスキーマが必要な場合は、代わりに SQL スキーマを使用する必要がありますapplication.rb
。
config.active_record.schema_format = :sql
次に、を削除して代わりにschema.rb
使用structure.sql
します。SQL スキーマ ダンプは 3.2 まで壊れており、Rails のさまざまなバージョンでスキーマの読み込みに問題があることに注意してください (ただし、いつでもpsql < structure.sql
回避できます)。良い面として、SQL スキーマ ダンプは、実際の外部キー、チェック制約、トリガーなどの凝ったものを追跡します。
ところで、本当に SHA が必要な場合は、 のdigest
関数pgcrypto
を参照してください。