在postgres中将日期字段转换为多个字段的最快方法

The fastest way to transform date field into multiple fields in postgres

我有一个包含大约 100.000 行的 table,其中包含一个特定的可为空的日期字段,我需要将其转换为多列。这些列可通过视图访问。

为了简化起见,假设我加入了两个 tables,称为 tab1 和 tab2,这两个 tables 的内容并不重要,除了来自 tab1[=11 的日期字段=]

到目前为止,我得到的解决方案如下:

create view result_view as 
   select to_char(t1.date, 'YYYY') AS year,
          to_char(t1.date, 'MM') AS month,
          to_char(t1.date, 'YYYY-MM-DD') AS day,
          t2.value as value
   from tab t1 left join tab2 t2 on t1.id = t2.id;

目前的方案太费时间了,有什么优化吗?

I have a very big table containing about 100.000 rows,

不是很大 ;)

运行你在explain (analyze, buffers)下查询看时间丢在什么地方

除此之外,我建议使用 extract 而不是 to_char

例如extract(YEAR from t1.date)

提取是 SQL 标准和 returns 数字,而不是字符串。这是经常需要的。

有关提取的更多信息:http://modern-sql.com/feature/extract