postgresql 时区与时间函数

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: --把时间戳转成epoch值postgres=# select extract(epoch from now()); date_part ------------------ 1447898857.
--把时间戳转成epoch值
postgres=# select extract(epoch from now());
    date_part     
------------------
 1447898857.74524
(1 row)


--把epoch 值转换回时间戳
postgres=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' +  1447898857.74524 * INTERVAL '1 second';           
           ?column?           
------------------------------
 2015-11-19 10:07:37.74524+08
 

 postgres=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' +  1447898857.74524 * INTERVAL '1 second';           
           ?column?           
------------------------------
 2015-11-19 10:07:37.74524+08

 --查看当前的时间戳
postgres=# select clock_timestamp(),current_timestamp,localtimestamp;
        clock_timestamp        |              now              |         timestamp          
-------------------------------+-------------------------------+----------------------------
 2016-02-02 17:54:15.547194+08 | 2016-02-02 17:54:15.546956+08 | 2016-02-02 17:54:15.546956
 
--时间加减
postgres=# select date '2016-02-02 10:00:00'+ interval '10 minutes'; 
      ?column?       
---------------------
 2016-02-02 00:10:00
 
 
 
--直接用sql生成随机日期时间
select '2015-5-1'::date + trunc(random()*100)::integer +' 00:22:22'::time + (trunc(random()*3600*24)||' second')::interval; 

--不同时区之间的转换
postgres=# select '2016-02-03 09:07:30.816885+08' at time zone 'pst';
          timezone          
----------------------------
 2016-02-02 17:07:30.816885
(1 row)

postgres=# select '2016-02-03 09:07:30.816885+08' at time zone 'cct';
          timezone          
----------------------------
 2016-02-03 09:07:30.816885
(1 row)
  
postgres=#  SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'cct';
      timezone       
---------------------
 2001-02-17 09:38:40

--查看系统支持的时区
 select * from pg_timezone_names ; 
 
 --时区设置参数
timezone = 'PRC'

--修改时区的方法
1. 全局参数
postgresql.conf
timezone='UTC'

2. 数据库级配置
alter database dbname set timezone='UTC';

pipeline=# select * from pg_db_role_setting ;
 setdatabase | setrole |              setconfig               
-------------+---------+--------------------------------------
       14930 |       0 | {TimeZone=UTC}

3. 用户级配置
alter role rolname set timezone='UTC';
或者
alter role all set timezone='UTC';

pipeline=# select * from pg_db_role_setting ;
 setdatabase | setrole |              setconfig               
-------------+---------+--------------------------------------
       14930 |       0 | {TimeZone=UTC}
           0 |       0 | {TimeZone=UTC}
  
 --创建随机日期时间函数       
   CREATE OR REPLACE FUNCTION rand_date_time(start_date date, end_date date) RETURNS TIMESTAMP AS  
$BODY$  
 DECLARE  
    interval_days integer;  
    random_seconds integer;  
random_dates integer;  
    random_date date;  
    random_time time;
    
BEGIN  
    interval_days := end_date - start_date;  
    random_dates:= trunc(random()*interval_days);
    random_date := start_date + random_dates; 
    random_seconds:= trunc(random()*3600*24); 
    random_time:=' 00:00:00'::time+(random_seconds || ' second')::INTERVAL;
    RETURN random_date +random_time;  
END;   
$BODY$  
LANGUAGE plpgsql;  
--生成指定时间内的随机时间
SELECT rand_date_time('2000-01-01', '2013-12-31');  


--休眠1.5秒后执行,单位秒
SELECT clock_timestamp(),pg_sleep(1.5),clock_timestamp();
--休眠5分钟,单位interval
SELECT clock_timestamp(),pg_sleep_for('5 minutes'),clock_timestamp();
--到指定时间执行,注意这些休眠时间不是完全精确的
SELECT clock_timestamp(),pg_sleep_until('today 10:00'),clock_timestamp();



相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 PostgreSQL
Postgresql设置时区
Postgresql设置时区
|
关系型数据库 数据库 PostgreSQL
postgresql 时区配置,系统主机与数据库时间不一致
--有时候操作系统的时间与pg的时间不一致,这往往时两者时区不一致造成的 --查看系统时间与时区 [postgres@rudy_01 data]$ date Thu Nov 19 09:3...
1611 0
|
关系型数据库 RDS
AWS RDS 解决时区,utf8问题
之前使用aws 的 rds,解决时区问题很复杂,需要折腾下。 现在变的很简单了,轻轻一点解决问题。 参考文章: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.LocalTimeZone 已经在文档里面说明了,只需要增加参数就行了。 在操作界面找到
2145 0
|
关系型数据库 PostgreSQL 数据库
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
1254 1
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
1754 2
|
SQL 关系型数据库 Linux
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
931 0
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
834 4