sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails konverterar inte tidszon (PostgreSQL)

Din databas lagrar dina tidsstämplar i UTC (som den ska). ActiveRecord gör tidszonsjusteringar när det vet att det har en tidsstämpel; så när du säger detta:

puts Activity.first.starting_at

AR vet att starting_at är en tidsstämpel så den instansierar tidsstämpeln som en ActiveSupport::TimeWithZone instans och den klassen tillämpar tidszonsjusteringen. Men när du säger detta:

select("date_trunc('day', activities.starting_at) as date ...

AR kommer inte att analysera SQL för att ta reda på den date_trunc returnerar en tidsstämpel, AR vet inte ens vad date_trunc betyder att. AR kommer bara att se en sträng som kommer ut från databasen och den kommer att lämna den till dig utan tolkning. Du är fri att mata den strängen till ActiveSupport::TimeWithZone (eller din favorittimehanteringsklass) själv:det är inget fel med att berätta saker för AR som den inte kan och inte kan veta på egen hand.

Rails är smart men det är inte magi.




  1. Datakällans namn hittades inte och ingen standarddrivrutin specificerad som ansluter mysql

  2. Hur kan jag importera en mysql-dump?

  3. Ändra en normal tabell till en främmande cstore_fdw-tabell

  4. hur gör man en trigger som primärnyckelbegränsning?