sql >> データベース >  >> RDS >> PostgreSQL

Railsの移行:デフォルトとしてランダム文字列のmd5のpostgresql

    :おそらくbrcebn's を見たいと思うでしょう。 より新しいバージョンのRailsを使用している場合は答えてください。

    Railsはこれを解釈しようとします:

    t.string :uniqueid, default: md5(random()::text)
    

    Rubyコードおよび:default => md5(...)として Rubyでは何の意味もありません。引用すると、Railsはそれを文字列と見なし、 uniqueidのデフォルト値を作成します。 文字列'md5(random()::text)' それは役に立ちません。

    列のデフォルトで関数呼び出しを使用する場合は、テーブルの変更 手作業:

    connection.execute(%q{
        alter table your_table alter column uniqueid set default md5(random()::text)
    })
    

    これにより、データベースに必要なデフォルトが取得されますが、 schema.rbに新しいデフォルトについての言及がないことに気付くかもしれません。 。使用可能なスキーマが必要な場合は、代わりにSQLスキーマを使用する必要があります。 code> application.rb

    config.active_record.schema_format = :sql
    

    次に、 schema.rbを削除します structure.sqlを使用します 代わりは。 SQLスキーマダンプは3.2まで壊れていて、さまざまなRailsバージョンでスキーマの読み込みに問題があることに注意してください(ただし、いつでも psql その周りのあなたの方法)。利点として、SQLスキーマダンプは、実際の外部キーの凝ったものを追跡し、制約、トリガーなどをチェックします...

    ところで、本当にSHAが必要な場合は、<を参照してください。 code>ダイジェスト pgcryptoの関数



    1. Oracleでコンマ区切りの文字列内の要素の数をカウントします

    2. Docker-compose:mysqld:ファイルを作成/書き込みできません'/ var / lib / mysql / is_writable'(エラーコード:13-アクセスが拒否されました)

    3. Laravel5.7で100万行を挿入/更新する最速の方法

    4. Oracle db Join と FROM a、b、c の比較