como alterar a migração de trilhos t.timestamps para usar `timestamp (0) sem fuso horário` no postgres
Estou tentando descobrir como alterar o tipo de dados nativo quet.timestamps
usa em uma migração de trilhos. O tipo padrão que termina no postgres étimestamp without timezone
. O que eu gostaria, em vez disso, étimestamp(0) without timezone
.
Gostaria de alterar o tipo de dados nativo para que, quando uma nova tabela for criada et.timestamps
é usado na migração, ele cria automaticamente o tipo de dados do carimbo de data / hora corret
Eu exijotimestamp(0) without timezone
porque meu aplicativo rails compartilha seu banco de dados com um aplicativo laravel e os dois aplicativos podem inserir dados. Devido ao fato de o rails usar milissegundos / laravel, não parece, e não parece haver uma maneira (a partir de 23/10/2018) para o laravel suportar uma tabela que contenha diferentes formatos de timestamps Y-m-d H:i:s.u
vsY-m-d H:i:s
) sem precisar desativar os carimbos de data e hora no modelo, desabilitando essencialmente o gerenciamento automático deles, gostaria que o banco de dados reforçasse o uso de um único formato Y-m-d H:i:s
).
Para mais detalhes, por favor, minha outra pergunta: Existe uma maneira de alterar os carimbos de data e hora padrão do Rails para Y-m-d H: i: s (em vez de Y-m-d H: i: s.u) ou fazer com que o laravel ignore a parte decimal de Y-m-d H: i: s.u?
Então eu quero usartimestamp(0)
para truncar os milissegundos e não precisar pensar em definir os tipos de carimbo de data / hora da tabela corretamente ao criar uma nova tabela, pois o tipo nativo já seriatimestamp(0)
Eu tentei isso
./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
e uma migração 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
mas isso não funciono
Também tentei alterar o carimbo de data / hora para usar timestampz com a mesma migração acima de uma verificação de sanidade, ainda sem sorte ...
require "active_record/connection_adapters/postgresql_adapter"
module ActiveRecord
module ConnectionAdapters
class PostgreSQLAdapter
NATIVE_DATABASE_TYPES.merge!(
timestamp: { name: "timestamptz" }
)
end
end
end