如何查找存储在postgres中的所有无效时区

时间:2018-10-02 01:18:54

标签: postgresql timezone

在我们的应用程序中,我们将用户的时区与用户记录一起存储在数据库中。 但是,以某种方式,我们最终得到了无效的时区(就Postgres而言)。可能是因为原始值a来自其他来源...

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

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

我们收到如下错误:

  

错误:时区“ US / Pacific-New”未被识别

解决此问题的最佳方法是什么?如何识别所有具有无效时区的记录?

1 个答案:

答案 0 :(得分:4)

  

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

这是一种方式

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