PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

W migracji Rails, jak ustawić domyślną wartość kolumny na NOW() zamiast czasu uruchomienia migracji?

Nie jest to dobrze udokumentowane, ale możesz podać lambdę jako wartość domyślną w migracji, a to wystarczy. Jeśli powiesz to:

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

wtedy domyślna wartość kolumny zostanie ustawiona na now() i funkcja bazy danych now() nie zostanie wywołana, dopóki dla kolumny nie będzie potrzebna wartość domyślna. Następnie, jeśli \d stratum_worker_submissions w psql zobaczysz:

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

zgodnie z życzeniem. Każda inna wartość domyślna zostanie oceniona po uruchomieniu migracji i otrzymasz jako domyślną stałą sygnaturę czasową.

Alternatywnie, zawsze możesz to zrobić ręcznie za pomocą 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

Zauważ, że jeśli zaczniesz ręcznie zmieniać schemat za pomocą SQL, możesz zacząć robić rzeczy, które nie pojawią się w db/schema.rb ponieważ możesz szybko dostać się do SQL, którego ActiveRecord nie rozumie. Jeśli tak się stanie, możesz zmienić z db/schema.rb do db/structure.sql zmieniając config/application.rb :

config.active_record.schema_format = :sql

a następnie zastępując db/schema.rb z db/structure.sql w kontroli wersji i przy użyciu db:structure rake zadania zamiast zwykłego db:schema zadania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PSQLException i problem z blokadą po dodaniu wyzwalacza do tabeli

  2. AsyncQuery z postgresql i dapper przy użyciu npqsql

  3. Wyzwalacz Postgres do aktualizacji pamięci podręcznej Java

  4. Grupuj według skróconej daty w JPA

  5. Czy mogę sprawić, by funkcja plpgsql zwróciła liczbę całkowitą bez użycia zmiennej?