PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

В Rails migraiton, как да задам стойността по подразбиране на колона да бъде 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 тъй като можете бързо да влезете в SQL, който ActiveRecord не разбира. Ако това се случи, можете да промените от db/schema.rb към db/structure.sql чрез промяна на config/application.rb :

config.active_record.schema_format = :sql

и след това заместване на db/schema.rb с db/structure.sql в контрола на ревизиите и използвайки db:structure рейк задачи вместо обичайната db:schema задачи.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Общо... с обрат

  2. Сумирайте до достигане на праговата стойност и след това нулирайте брояча

  3. Как да избера редове със стойност на колона като нула?

  4. Присъединете се към множество маси, като използвате distinct on

  5. Задайте ограничение на array_agg()