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

migracja rails:domyślnie postgresql dla md5 losowego łańcucha

Uwaga :Prawdopodobnie chcesz spojrzeć na brcebn odpowiedz, jeśli używasz nowszej wersji Railsów.

Railsy spróbują to zinterpretować:

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

jako kod Rubiego i :default => md5(...) nic nie znaczy w Ruby. Jeśli ją zacytujesz, Railsy uznają, że jest to ciąg znaków i stworzą domyślną wartość dla uniqueid ciąg 'md5(random()::text)' a to nie pomoże.

Jeśli chcesz użyć wywołania funkcji w domyślnej kolumnie, możesz wykonać alter table ręcznie:

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

Dzięki temu uzyskasz wartość domyślną, którą chcesz w bazie danych, ale możesz zauważyć, że nie ma wzmianki o nowej wartości domyślnej w twoim schema.rb . Jeśli potrzebujesz użytecznego schematu, musisz użyć schematu SQL, umieszczając go w application.rb :

config.active_record.schema_format = :sql

Następnie usuń swój schema.rb i użyj structure.sql zamiast. Zwróć uwagę, że zrzuty schematów SQL były zepsute do wersji 3.2 i występują problemy z ładowaniem schematów w różnych wersjach Railsów (ale zawsze możesz psql < structure.sql sposób na obejście tego). Z drugiej strony, zrzuty schematów SQL będą śledzić wymyślne rzeczy, prawdziwe klucze obce, sprawdzać ograniczenia, wyzwalacze, ...

BTW, jeśli naprawdę chcesz SHA, spójrz na digest funkcja z pgcrypto .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie są logi PostgreSQL w systemie macOS?

  2. tworzenie rozszerzenia pg_cron w docker-entrypoint-initdb.d kończy się niepowodzeniem

  3. Dziwne zachowanie w Postgresql

  4. zaktualizuj zapytanie z połączeniem na dwóch stołach

  5. Wyświetl błąd w PostgreSQL