sql >> Database >  >> RDS >> PostgreSQL

rails migratie:standaard postgresql voor md5 van willekeurige string

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 .



  1. MySQL:alias gebruiken als kolom

  2. Rails:aanroepen van .limit(5) verandert de volgorde van de resultaten

  3. vergelijk door komma's gescheiden waarden in sql

  4. Hoe de GROUP BY-clausule in SQL te gebruiken?