PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails-Migration:postgresql für md5 mit zufälliger Zeichenfolge als Standard

Hinweis :Sie möchten sich wahrscheinlich brcebns ansehen antworten, wenn Sie eine neuere Version von Rails verwenden.

Rails wird versuchen, dies zu interpretieren:

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

als Ruby-Code und :default => md5(...) bedeutet nichts in Ruby. Wenn Sie es in Anführungszeichen setzen, denkt Rails, dass es sich um einen String handelt, und macht den Standardwert für uniqueid die Zeichenfolge 'md5(random()::text)' und das wird nicht helfen.

Wenn Sie einen Funktionsaufruf in einem Spaltenstandard verwenden möchten, können Sie Tabelle ändern per Hand:

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

Dadurch erhalten Sie die gewünschte Standardeinstellung in der Datenbank, aber Sie werden möglicherweise feststellen, dass die neue Standardeinstellung in Ihrer schema.rb nicht erwähnt wird . Wenn Sie ein verwendbares Schema wünschen, müssen Sie stattdessen ein SQL-Schema verwenden, indem Sie dies in Ihre application.rb :

config.active_record.schema_format = :sql

Löschen Sie dann Ihre schema.rb und verwenden Sie structure.sql stattdessen. Beachten Sie, dass SQL-Schema-Dumps bis 3.2 fehlerhaft waren und es in verschiedenen Rails-Versionen Probleme beim Laden von Schemas gibt (aber Sie können immer psql Ihren Weg darum herum). Auf der anderen Seite behalten SQL-Schema-Dumps ausgefallene Dinge im Auge, echte Fremdschlüssel, Check Constraints, Trigger, ...

Übrigens, wenn Sie wirklich SHA wollen, sollten Sie sich digest Funktion von pgcrypto .