PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

migração de trilhos:postgresql para md5 de string aleatória como padrão


Observação :Você provavelmente quer ver brcebn's responda se estiver usando uma versão mais recente do Rails.

Rails tentará interpretar isso:
t.string :uniqueid, default: md5(random()::text)

como código Ruby e :default => md5(...) não significa nada em Ruby. Se você citá-lo, o Rails pensará que é uma string e tornará o valor padrão para uniqueid a string 'md5(random()::text)' e isso não vai ajudar.

Se você quiser usar uma chamada de função em um padrão de coluna, você pode fazer o alter table à mão:
connection.execute(%q{
    alter table your_table alter column uniqueid set default md5(random()::text)
})

Isso lhe dará o padrão que você deseja no banco de dados, mas você pode notar que não há menção ao novo padrão em seu schema.rb . Se você quiser um esquema utilizável, precisará usar um esquema SQL colocando-o em seu application.rb :
config.active_record.schema_format = :sql

Em seguida, exclua seu schema.rb e use structure.sql em vez de. Observe que os dumps do esquema SQL foram interrompidos até a versão 3.2 e há problemas de carregamento do esquema em várias versões do Rails (mas você sempre pode psql < structure.sql seu caminho em torno disso). No lado positivo, os dumps do esquema SQL manterão o controle de coisas extravagantes, chaves estrangeiras reais, verificarão restrições, gatilhos, ...

BTW, se você realmente quer SHA, então você vai querer olhar para o digest função de pgcrypto .