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

migrazione rails:postgresql per md5 di stringa casuale come impostazione predefinita

Nota :Probabilmente vorrai dare un'occhiata a brcebn's rispondi se stai utilizzando una versione più recente di Rails.

Rails cercherà di interpretare questo:

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

come codice Ruby e :default => md5(...) non significa nulla in Ruby. Se lo citi, Rails penserà che sia una stringa e creerà il valore predefinito per uniqueid la stringa 'md5(random()::text)' e questo non aiuterà.

Se desideri utilizzare una chiamata di funzione in una colonna predefinita, puoi eseguire alter table a mano:

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

Questo otterrà il valore predefinito che desideri nel database, ma potresti notare che non viene menzionato il nuovo valore predefinito nel tuo schema.rb . Se desideri uno schema utilizzabile, dovrai invece utilizzare uno schema SQL inserendolo nel tuo application.rb :

config.active_record.schema_format = :sql

Quindi elimina il tuo schema.rb e usa structure.sql invece. Nota che i dump dello schema SQL sono stati interrotti fino alla 3.2 e ci sono problemi di caricamento dello schema in varie versioni di Rails (ma puoi sempre psql < structure.sql a modo tuo). Al rialzo, i dump dello schema SQL terranno traccia di cose fantasiose chiavi esterne reali, verificheranno vincoli, trigger, ...

A proposito, se vuoi davvero SHA, allora ti consigliamo di dare un'occhiata a digest funzione da pgcrypto .