PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

migration rails :postgresql pour md5 de chaîne aléatoire par défaut

Remarque :Vous voulez probablement regarder brcebn's répondez si vous utilisez une version plus récente de Rails.

Rails va essayer d'interpréter ceci :

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

comme code Ruby et :default => md5(...) ne veut rien dire en Ruby. Si vous le citez, alors Rails pensera qu'il s'agit d'une chaîne et fera la valeur par défaut pour uniqueid la chaîne 'md5(random()::text)' et ça ne va pas aider.

Si vous souhaitez utiliser un appel de fonction dans une colonne par défaut, vous pouvez faire le alter table à la main :

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

Cela vous donnera la valeur par défaut que vous souhaitez dans la base de données, mais vous remarquerez peut-être qu'il n'y a aucune mention de la nouvelle valeur par défaut dans votre schema.rb . Si vous voulez un schéma utilisable, vous devrez utiliser un Schéma SQL à la place en le mettant dans votre application.rb :

config.active_record.schema_format = :sql

Supprimez ensuite votre schema.rb et utilisez structure.sql Au lieu. Notez que les vidages de schéma SQL ont été interrompus jusqu'à la version 3.2 et qu'il existe des problèmes de chargement de schéma dans différentes versions de Rails (mais vous pouvez toujours psql < structure.sql votre chemin autour de cela). En revanche, les vidages de schéma SQL garderont une trace des choses fantaisistes, des vraies clés étrangères, des contraintes de vérification, des déclencheurs, ...

BTW, si vous voulez vraiment SHA, vous voudrez regarder le digest fonction de pgcrypto .