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

Rails移行で、移行を実行した時間ではなく、列のデフォルト値をNOW()に設定するにはどうすればよいですか?

    十分に文書化されていませんが、移行のデフォルト値としてラムダを指定できます。これにより、正しいことが実行されます。あなたがこれを言うなら:

    def change
      change_column_default :stratum_worker_submissions, :created_at, -> { 'now()' }
    end
    

    その場合、列のデフォルト値はnow()に設定されます。 およびデータベース関数now() 列にデフォルト値が必要になるまで呼び出されません。次に、\d stratum_worker_submissionsの場合 psqlで 表示されます:

    created_at | timestamp without time zone | not null default now()
    

    望んだ通りに。その他のデフォルトは、移行の実行時に評価され、最終的には固定のタイムスタンプがデフォルトとして使用されます。

    または、SQLを使用していつでも手動で実行できます:

    def up
      connection.execute(%q(
        alter table stratum_worker_submissions
        alter column created_at
        set default now()
      ))
    end
    def down
      connection.execute(%q(
        alter table stratum_worker_submissions
        alter column created_at
        drop default
      ))
    end
    

    SQLを使用してスキーマを手動で変更し始めると、db/schema.rbに表示されないことを開始する可能性があることに注意してください。 ActiveRecordが理解できないSQLにすぐに入ることができるからです。その場合は、db/schema.rbから変更できます。 db/structure.sqlconfig/application.rbを変更する :

    config.active_record.schema_format = :sql
    

    次に、db/schema.rbを置き換えます db/structure.sqlを使用 リビジョン管理でdb:structureを使用する 通常のdb:schemaの代わりにタスクをレーキします タスク。




    1. phpを挿入した後に生成されたuuidを取得します

    2. MySQL:別の列の値に基づいて列の一意の値を選択します

    3. SQLServer2014インクリメンタル統計

    4. LinuxからMicrosoftSQLServerにアクセスする方法は何ですか?