Postgres和Django-DataError:无法识别时区

时间:2019-07-04 19:58:42

标签: django postgresql timezone

我们从一些用户那里收到以下错误:

DataError: time zone "Asia/Qostanay" not recognized

我们发现问题出在以下SQL查询中:

SELECT * 
FROM "app_foobar" 
WHERE (
    EXTRACT('hour' FROM "app_foobar"."date" AT TIME ZONE 'Asia/Qostanay') = 0
);

1 个答案:

答案 0 :(得分:3)

有两个问题:

  1. 时区定义随时间变化。更新Ubuntu时区数据:
sudo apt-get update
sudo apt-get install tzdata
  1. Postgres 11.1不支持该时区(及其他一些时区)。将Postgres更新到11.4:
sudo apt-get update
sudo apt-get install postgres-11
sudo apt-get install postgres-client-11

有关更新Postgres的一些说明:

  1. 次要版本(例如11.0-> 11.4)不需要迁移数据。仅可执行文件被更新。
  2. PostgreSQL将重新启动(数据库将在一两秒钟内不可用)

相关的postgresql更改日志(https://www.postgresql.org/docs/release/11.2/):

  

将时区数据文件更新为tzdata版本2018i,以便在哈萨克斯坦,梅特拉卡特拉,圣多美和普林西比DST法律变更。哈萨克斯坦的Qyzylorda区一分为二,从而创建了一个新的亚洲/ Qostanay区,因为某些地区未更改UTC偏移量。香港和许多太平洋岛屿的历史更正。