sql >> Base de Datos >  >> RDS >> PostgreSQL

migración de rieles:postgresql para md5 de cadena aleatoria como predeterminado

Nota :Probablemente quieras ver brcebn's responda si está usando una versión más reciente de Rails.

Rails intentará interpretar esto:

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

como código Ruby y :default => md5(...) no significa nada en Ruby. Si lo cita, Rails pensará que es una cadena y establecerá el valor predeterminado para uniqueid la cadena 'md5(random()::text)' y eso no va a ayudar.

Si desea usar una llamada de función en una columna predeterminada, puede hacer alter table a mano:

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

Eso le dará el valor predeterminado que desea en la base de datos, pero es posible que note que no se menciona el nuevo valor predeterminado en su schema.rb . Si desea un esquema utilizable, tendrá que usar un esquema SQL colocando esto en su application.rb :

config.active_record.schema_format = :sql

Luego elimine su schema.rb y usa structure.sql en cambio. Tenga en cuenta que los volcados de esquema SQL se rompieron hasta 3.2 y hay problemas de carga de esquema en varias versiones de Rails (pero siempre puede psql < structure.sql su camino alrededor de eso). Por el lado positivo, los volcados de esquemas SQL realizarán un seguimiento de las claves foráneas reales de las cosas sofisticadas, comprobarán las restricciones, los activadores, ...

Por cierto, si realmente quieres SHA, querrás ver el digest función de pgcrypto .