sql >> Database teknologi >  >> RDS >> PostgreSQL

rails migration:postgresql for md5 af tilfældig streng som standard

Bemærk :Du vil sikkert se på brcebn's svar, hvis du bruger en nyere version af Rails.

Rails vil forsøge at fortolke dette:

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

som Ruby-kode og :default => md5(...) betyder ikke noget i Ruby. Hvis du citerer det, vil Rails tro, at det er en streng og lave standardværdien for uniqueid strengen 'md5(random()::text)' og det vil ikke hjælpe.

Hvis du vil bruge et funktionskald i en kolonnestandard, kan du gøre ændre tabel i hånden:

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

Det vil give dig den standard, du ønsker i databasen, men du vil måske bemærke, at der ikke er nogen omtale af den nye standard i dit schema.rb . Hvis du vil have et brugbart skema, skal du bruge et SQL-skema i stedet ved at indsætte dette i dit applikation.rb :

config.active_record.schema_format = :sql

Slet derefter dit schema.rb og brug structure.sql i stedet. Bemærk, at SQL-skemadumps var brudt indtil 3.2, og der er problemer med skemaindlæsning i forskellige Rails-versioner (men du kan altid psql din vej uden om det). På den positive side vil SQL-skemadumps holde styr på fancy ting rigtige fremmednøgler, tjekke begrænsninger, triggere, ...

BTW, hvis du virkelig ønsker SHA, så vil du se på code>digest funktion fra pgcrypto .



  1. Hvordan kan jeg definere betingede ikke-null-begrænsninger på flere kolonner i mySql?

  2. Sådan tilføjes automatisk stigningskolonne i eksisterende tabel i MySQL

  3. mysql sum, med række-id'er

  4. Hvornår skal man bruge MyISAM og InnoDB?