【问题标题】:How to find all invalid timezones stored in postgres如何查找存储在 postgres 中的所有无效时区
【发布时间】:2019-03-07 03:19:03
【问题描述】:

在我们的应用程序中,我们将用户的时区与用户记录一起存储在数据库中。 然而,不知何故,我们最终得到了无效的时区(就 postgres 而言)。可能是因为原始值来自不同的来源...

现在,当我们尝试在其中一个查询中使用时区时,例如:

select current_time, u.*
from users u
where extract(hour from (current_time at time zone u.time_zone)) = 8

我们收到如下错误:

错误:时区“US/Pacific-New”无法识别

处理此问题的最佳方法是什么?如何识别所有包含无效时区的记录?

【问题讨论】:

  • 他们不应该在 pg_timezone_names 表中都有匹配吗?如果他们不想尝试模糊匹配?
  • @Slumdog 好吧,理想情况下,我想将记录修复为 postgres 可以理解的内容。
  • 听起来像对 pg_timezone_names 的左连接将是一个好的开始,但可以找到损坏的行。

标签: postgresql timezone


【解决方案1】:

如何识别所有包含无效时区的记录?

这是一种方式

SELECT u.* 
FROM   users u 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   pg_timezone_names tz 
                   WHERE  tz.NAME = u.time_zone); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多