sql >> Databasteknik >  >> RDS >> PostgreSQL

rails migration:postgresql för md5 av slumpmässig sträng som standard

Obs :Du vill förmodligen titta på brcebns svara om du använder en nyare version av Rails.

Rails kommer att försöka tolka detta:

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

som Ruby-kod och :default => md5(...) betyder ingenting i Ruby. Om du citerar det kommer Rails att tro att det är en sträng och gör standardvärdet för uniqueid strängen 'md5(random()::text)' och det kommer inte att hjälpa.

Om du vill använda ett funktionsanrop i en kolumnstandard kan du göra ändra tabell för hand:

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

Det ger dig den standard du vill ha i databasen, men du kanske märker att det inte nämns något om den nya standarden i ditt schema.rb . Om du vill ha ett användbart schema måste du använda ett SQL-schema istället genom att lägga in detta i ditt application.rb :

config.active_record.schema_format = :sql

Ta sedan bort ditt schema.rb och använd structure.sql istället. Observera att SQL-schemadumpar var trasiga fram till 3.2 och det finns problem med schemaladdning i olika Rails-versioner (men du kan alltid psql din väg runt det). På uppsidan kommer SQL-schemadumpar att hålla reda på snygga saker med riktiga främmande nycklar, kontrollera begränsningar, triggers, ...

BTW, om du verkligen vill ha SHA så vill du titta på code>sammandrag funktion från pgcrypto .



  1. Hur man gör ActiveRecord ThreadSafe

  2. Fjärranslutningar Mysql Ubuntu - bindningsadress misslyckades

  3. Mysql Query Error - Auto Coins ADD

  4. Längsta prefixmatchning