PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Railsy nie konwertują strefy czasowej (PostgreSQL)

Twoja baza danych przechowuje Twoje znaczniki czasu w UTC (tak jak powinno). ActiveRecord dokonuje korekt strefy czasowej, gdy wie, że ma znacznik czasu; więc kiedy to powiesz:

puts Activity.first.starting_at

AR wie, że starting_at jest znacznikiem czasu, więc tworzy wystąpienie znacznika czasu jako ActiveSupport::TimeWithZone wystąpienie i ta klasa zastosuje korektę strefy czasowej. Ale kiedy to powiesz:

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

AR nie będzie analizować kodu SQL, aby dowiedzieć się, że date_trunc zwróci znacznik czasu, AR nawet nie wie, co date_trunc oznacza. AR po prostu zobaczy ciąg wychodzący z bazy danych i przekaże go bez interpretacji. Możesz przesłać ten ciąg do ActiveSupport::TimeWithZone (lub twoją ulubioną klasę zarządzania czasem):nie ma nic złego w mówieniu AR rzeczy, których sam nie wie i nie może wiedzieć.

Railsy są sprytne, ale nie magiczne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie linków relacji w PostgreSQL przez pgAdmin

  2. Jak wstawić klucz obcy w modelu sekwencyjnym?

  3. Wybierz trzy najwyższe wartości w każdej grupie

  4. Jak zwrócić zwykłą wartość z zapytania Knex / Postgresql?

  5. Zduplikowany klucz postgresql narusza ograniczenie unikalności