cómo cambiar la migración de rieles t.timestamps para usar `timestamp (0) sin timezone` en postgres
Estoy tratando de descubrir cómo cambiar el tipo de datos nativo quet.timestamps
utiliza en una migración de rieles. El tipo predeterminado que termina en postgres estimestamp without timezone
. Lo que me gustaría en cambio estimestamp(0) without timezone
.
Me gustaría cambiar el tipo de datos nativo para que cuando se cree una nueva tabla yt.timestamps
se utiliza en la migración, crea automáticamente el tipo de datos de marca de tiempo correcto.
Requierotimestamp(0) without timezone
porque mi aplicación rails comparte su DB con una aplicación laravel y ambas aplicaciones pueden insertar datos. Debido al hecho de que los rieles usan milisegundos / laravel no, y no parece haber una manera (a partir del 23/10/2018) para que laravel admita tener una tabla que contenga diferentes formatos de marcas de tiempo Y-m-d H:i:s.u
vsY-m-d H:i:s
) sin tener que desactivar las marcas de tiempo en el modelo, esencialmente deshabilitando la administración automática de ellos, me gustaría que la base de datos imponga el uso de un único formato Y-m-d H:i:s
).
Para más detalles por favor mi otra pregunta: ¿Hay alguna manera de cambiar las marcas de tiempo predeterminadas de Rails a Y-m-d H: i: s (en lugar de Y-m-d H: i: s.u) o hacer que laravel ignore la parte decimal de Y-m-d H: i: s.u?
Así que quiero usartimestamp(0)
para truncar los milisegundos y no tener que pensar en configurar correctamente los tipos de marca de tiempo de las tablas al crear una nueva tabla, ya que el tipo nativo ya seríatimestamp(0)
He intentado esto
./config/environments/initializers
require "active_record/connection_adapters/postgresql_adapter"
module ActiveRecord
module ConnectionAdapters
class PostgreSQLAdapter
NATIVE_DATABASE_TYPES.merge!(
timestamp: { name: "timestamp(0) without timezone" }
)
end
end
end
y una migración como
class ChangeTimestampTypesToTimestamp0 < ActiveRecord::Migration[5.2]
def change
create_table :test, id: :uuid, default: -> { "gen_random_uuid()" } do|t|
t.string :name, null: false
t.timestamps
end
end
end
Pero eso no funcionó
También intenté cambiar la marca de tiempo para usar la marca de tiempo con la misma migración anterior que un control de cordura, todavía no tuve suerte ...
require "active_record/connection_adapters/postgresql_adapter"
module ActiveRecord
module ConnectionAdapters
class PostgreSQLAdapter
NATIVE_DATABASE_TYPES.merge!(
timestamp: { name: "timestamptz" }
)
end
end
end