PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Rails không chuyển đổi múi giờ (PostgreSQL)

Cơ sở dữ liệu của bạn đang lưu trữ dấu thời gian của bạn ở UTC (nếu cần). ActiveRecord đang thực hiện điều chỉnh múi giờ khi biết rằng nó có dấu thời gian; vì vậy, khi bạn nói điều này:

puts Activity.first.starting_at

AR biết rằng starting_at là dấu thời gian nên nó khởi tạo dấu thời gian dưới dạng ActiveSupport::TimeWithZone cá thể và lớp đó áp dụng điều chỉnh múi giờ. Nhưng, khi bạn nói điều này:

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

AR sẽ không phân tích cú pháp SQL để tìm ra date_trunc sẽ trả về dấu thời gian, AR thậm chí không biết date_trunc là gì có nghĩa. AR sẽ chỉ thấy một chuỗi xuất hiện từ cơ sở dữ liệu và nó sẽ giao nó cho bạn mà không cần diễn giải. Bạn có thể tự do cấp chuỗi đó cho ActiveSupport::TimeWithZone (hoặc lớp xử lý thời gian yêu thích của bạn):không có gì sai khi nói với AR những điều mà nó không và không thể tự biết.

Đường ray rất thông minh nhưng nó không phải là ma thuật.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng một khoảng thời gian thay đổi trong một khoảng thời gian trong Postgres

  2. Postgres chỉ chèn hàng nếu số hàng dưới một giới hạn

  3. Bảng thay đổi quá chậm trong postgres

  4. hibernate với c3p0:createClob () chưa được triển khai

  5. Song song đến với VACUUM