sql >> Databáze >  >> RDS >> PostgreSQL

migrace rails:postgresql pro md5 náhodného řetězce jako výchozí

Poznámka :Pravděpodobně se budete chtít podívat na brcebn's odpovězte, pokud používáte novější verzi Rails.

Rails se to pokusí interpretovat:

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

jako kód Ruby a :default => md5(...) v Ruby nic neznamená. Pokud jej uvedete, Rails si bude myslet, že se jedná o řetězec, a nastaví výchozí hodnotu pro uniqueid řetězec 'md5(random()::text)' a to nepomůže.

Pokud chcete použít volání funkce ve výchozím nastavení sloupce, můžete provést alter table ručně:

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

Tím získáte výchozí nastavení, které chcete v databázi, ale můžete si všimnout, že ve vašem schema.rb není žádná zmínka o novém výchozím nastavení. . Pokud chcete použitelné schéma, budete muset místo toho použít schéma SQL tak, že toto vložíte do application.rb :

config.active_record.schema_format = :sql

Poté smažte schema.rb a použijte structure.sql namísto. Všimněte si, že výpisy schémat SQL byly poškozeny až do verze 3.2 a v různých verzích Rails dochází k problémům s načítáním schématu (ale vždy můžete psql < structure.sql jak to obejít). Na druhou stranu, výpisy schémat SQL budou sledovat efektní věci skutečné cizí klíče, kontrolovat omezení, spouštěče, ...

BTW, pokud opravdu chcete SHA, pak se budete chtít podívat na digest funkce z pgcrypto .



  1. Jak nainstalovat SQL * PLUS klienta v linuxu

  2. Omezení terminologie MySQL vs rozdíl cizích klíčů?

  3. Existuje rozdíl mezi náhradním klíčem, syntetickým klíčem a umělým klíčem?

  4. Propojení mysqldump do mysql