Opmerking :U wilt waarschijnlijk kijken naar brcebn's antwoord als je een recentere versie van Rails gebruikt.
Rails zal proberen dit te interpreteren:
t.string :uniqueid, default: md5(random()::text)
als Ruby-code en :default => md5(...)
betekent niets in Ruby. Als je het citeert, zal Rails denken dat het een string is en de standaardwaarde maken voor uniqueid
de string 'md5(random()::text)'
en dat gaat niet helpen.
Als u een functieaanroep in een standaardkolom wilt gebruiken, kunt u de alter table
met de hand:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Dat geeft je de standaard die je wilt in de database, maar je merkt misschien dat er geen melding wordt gemaakt van de nieuwe standaard in je schema.rb
. Als je een bruikbaar schema wilt, moet je in plaats daarvan een SQL-schema gebruiken door dit in je application.rb
:
config.active_record.schema_format = :sql
Verwijder vervolgens uw schema.rb
en gebruik structure.sql
in plaats van. Merk op dat SQL-schemadumps tot 3.2 werden verbroken en dat er problemen zijn met het laden van schema's in verschillende Rails-versies (maar u kunt altijd psql < structure.sql
daar omheen). Aan de positieve kant houden SQL-schemadumps mooie dingen bij, echte buitenlandse sleutels, controlebeperkingen, triggers, ...
Trouwens, als je echt SHA wilt, kijk dan naar de digest
functie van pgcrypto
.