繁体   English   中英

如何从Postgres中的时间戳自动提取或索引日期?

How to auto-extract or index day from timestamp in Postgres?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我们有一个带有时间戳字段created_at的Postgres表。 定期地,我们需要找到所有记录,其中created_at的day字段是某个数字。

我们可以像这样运行查询

select * from table where extract(day from created_at) = 3;

我怀疑这效率不高,即正在执行全表扫描。 如果是这样,我可以通过某种方式创建索引以使上述效率更高吗?

如果不可能,我们可以创建一个单独的列,称为created_at_day并在其上创建索引。

所以我们可以像这样简单地运行查询

select * from table where created_at_day = 3;

假设created_at可以更新。 每当发生这种情况时, created_at_day也应更新。

Postgres是否提供任何支持来自动保持created_at_daycreated_at同步? 如果是这样,怎么办?

当然,这可以在应用程序逻辑中完成。 所以每当created_at创建或更新,我们更新了created_at_day列。 但是,只是想知道是否有更简单,自动化的方法来做到这一点。

谢谢

1 个回复

您可以在extract(day from created_at)创建索引extract(day from created_at)创建extract(day from created_at)

要查看区别:

建立表格

knayak=# create table t as select i ,now()::timestamp + interval '1 days' * i as created_at from generate_series(1,10000) as i;
SELECT 10000

在created_at上创建普通索引

knayak=# create index ind_created_at on t(created_at);
CREATE INDEX

knayak=# explain analyze select * from t where extract(day from created_at) = 3;
                                           QUERY PLAN
-------------------------------------------------------------------------------------------------
 Seq Scan on t  (cost=0.00..205.00 rows=50 width=12) (actual time=1.049..6.020 rows=328 loops=1)
   Filter: (date_part('day'::text, created_at) = '3'::double precision)
   Rows Removed by Filter: 9672
 Planning time: 0.392 ms
 Execution time: 6.070 ms
(5 rows)

用提取创建索引

knayak=# drop index ind_created_at;
DROP INDEX
knayak=# create index ind_created_at on t( extract(day from created_at) );
CREATE INDEX
knayak=# explain analyze select * from t where extract(day from created_at) = 3;
                                                        QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on t  (cost=4.67..61.66 rows=50 width=12) (actual time=0.110..0.260 rows=328 loops=1)
   Recheck Cond: (date_part('day'::text, created_at) = '3'::double precision)
   Heap Blocks: exact=54
   ->  Bitmap Index Scan on ind_created_at  (cost=0.00..4.66 rows=50 width=0) (actual time=0.093..0.093 rows=328 loops=1)
         Index Cond: (date_part('day'::text, created_at) = '3'::double precision)
 Planning time: 0.316 ms
 Execution time: 0.314 ms
(7 rows)
2 要求用户标识文件位置并从R中的文件位置自动提取变量名

我是R的新手,并且是一般编程人员,所以感谢您的耐心配合。 我正在尝试编写一个脚本,该脚本从.txt文件中读取值,并在进行一些操作后将结果打印出来。 我有两个相互关联的问题。 首先,是否有一个功能要求用户标识文件的位置? 即用户运行脚本。 脚本打开文件导航提示,并要求用户导航并选 ...

2011-12-02 22:33:43 2 94   r/ title
5 如何从索引中的时间戳中获取一天的秒数?

我有一个这样的数据框: 然后我获得小时分和秒数为: 这导致最后一列。 然后我想通过简单地将小时乘以 3600,分钟乘以 60,然后将所有三个相加来获得秒数。 但是,我不知道如何在不使用循环的情况下一次在所有行中执行此操作。 如果我单独访问值作为train_data['time'].val ...

6 每次构建后自动提取SQLite数据库文件

我有一个在应用启动时创建的SQLite数据库。 当前,在自动化测试中,我每次都删除现有数据库并重新创建它-在模拟器上进行每个数据库测试的重做非常耗时的过程。 如何改善测试设计以加快速度? 我想一次创建此.db文件,并将其重新用于自动化测试。 不幸的是,提取此文件是一个痛苦的过程,每次 ...

7 从PIG中的时间戳中提取日期

我正在尝试使用PIG分析日志。 需要从时间戳中提取日。 下面是示例日志。 样本记录 我已经使用以下命令加载了日志文件 现在我使用DateExtractor从时间中提取日期,如下所示 现在,我必须从日期中提取Day。 我尝试使用GetDay,但无法正常工作。 谁能 ...

10 如何从Java中的毫秒时间戳中提取一天中的时间段?

有人可以解释一下如何从毫秒时间戳值中获取一天中的某个时间段(AM/PM)? 这是目前通过以下代码完成的: 我只需要摆脱java.util.Calendar 。 我唯一的想法是将long值转换为LocalDateTime然后访问DateTimeFormatter.ofPattern("a"); ...

2020-03-17 16:00:26 2 195   java
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM