【发布时间】:2017-10-25 22:56:01
【问题描述】:
我正在使用 gem groupdate 在控制器的操作中执行这样的查询:
Event.where.not(user_id: [1, 3]).group_by_week(:created_at, week_start: :mon, last: 13, reverse: true).count
通过刷新网页执行几个顺序查询会不时更改 SQL 查询。似乎正在改变的是应用程序的默认时区,而我什至在此操作/视图中设置时区都没有发生这种情况。
这可能是什么原因?我如何/在哪里可以调试这个?
UTC 在application.rb 中设置为默认时区。上面同一个查询导致的两个不同 SQL 查询的例子:
SELECT COUNT(*) AS count_all, (DATE_TRUNC('week', (created_at::timestamptz - INTERVAL '0 day' - INTERVAL '0 second') AT TIME ZONE 'Etc/UTC') + INTERVAL '0 day' + INTERVAL '0 second') AT TIME ZONE 'Etc/UTC' AS date_trunc_week_created_at_timestamptz_interval_0_day_interval_ FROM "events" WHERE ("events"."user_id" NOT IN (1, 3, 290, 339)) AND (created_at >= '2017-07-31 00:00:00' AND created_at <= '2017-10-25 22:23:42.184226') GROUP BY (DATE_TRUNC('week', (created_at::timestamptz - INTERVAL '0 day' - INTERVAL '0 second') AT TIME ZONE 'Etc/UTC') + INTERVAL '0 day' + INTERVAL '0 second') AT TIME ZONE 'Etc/UTC'
SELECT COUNT(*) AS count_all, (DATE_TRUNC('week', (created_at::timestamptz - INTERVAL '0 day' - INTERVAL '0 second') AT TIME ZONE 'America/New_York') + INTERVAL '0 day' + INTERVAL '0 second') AT TIME ZONE 'America/New_York' AS date_trunc_week_created_at_timestamptz_interval_0_day_interval_ FROM "events" WHERE ("events"."user_id" NOT IN (1, 3, 290, 339)) AND (created_at >= '2017-07-31 04:00:00' AND created_at <= '2017-10-25 22:24:57.912750') GROUP BY (DATE_TRUNC('week', (created_at::timestamptz - INTERVAL '0 day' - INTERVAL '0 second') AT TIME ZONE 'America/New_York') + INTERVAL '0 day' + INTERVAL '0 second') AT TIME ZONE 'America/New_York'
【问题讨论】:
-
谢谢,为什么时区会随意改变呢?你的意思是要在源码的那个方法中找到答案吗?
标签: ruby-on-rails postgresql ruby-on-rails-5 rails-activerecord