PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Rails tidak mengonversi zona waktu (PostgreSQL)

Basis data Anda menyimpan stempel waktu Anda di UTC (sebagaimana mestinya). ActiveRecord membuat penyesuaian zona waktu ketika mengetahui bahwa ia memiliki stempel waktu; jadi, ketika Anda mengatakan ini:

puts Activity.first.starting_at

AR tahu bahwa starting_at adalah stempel waktu sehingga membuat stempel waktu sebagai ActiveSupport::TimeWithZone instance dan kelas itu menerapkan penyesuaian zona waktu. Tapi, ketika Anda mengatakan ini:

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

AR tidak akan menguraikan SQL untuk mengetahui bahwa date_trunc akan mengembalikan stempel waktu, AR bahkan tidak tahu apa date_trunc cara. AR hanya akan melihat string yang keluar dari database dan akan menyerahkannya kepada Anda tanpa interpretasi. Anda bebas memasukkan string itu ke ActiveSupport::TimeWithZone (atau kelas penanganan waktu favorit Anda) sendiri:tidak ada salahnya memberi tahu AR hal-hal yang tidak dan tidak dapat diketahuinya sendiri.

Rails memang pintar tapi bukan sihir.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hitung DATEDIFF di POSTGRES menggunakan SQLAlchemy

  2. kesalahan:Otentikasi identitas gagal untuk pengguna

  3. Memilih array dalam format yang dicetak dengan baik di SQL

  4. Mencampur level isolasi di PostgreSQL

  5. Pengelompokan SQL baris yang saling berpotongan/tumpang tindih