postgresql 时区与时间函数

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: --把时间戳转成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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
6月前
|
关系型数据库 PostgreSQL
Postgresql设置时区
Postgresql设置时区
|
关系型数据库 数据库 PostgreSQL
postgresql 时区配置,系统主机与数据库时间不一致
--有时候操作系统的时间与pg的时间不一致,这往往时两者时区不一致造成的 --查看系统时间与时区 [postgres@rudy_01 data]$ date Thu Nov 19 09:3...
1538 0
|
关系型数据库 RDS
AWS RDS 解决时区,utf8问题
之前使用aws 的 rds,解决时区问题很复杂,需要折腾下。 现在变的很简单了,轻轻一点解决问题。 参考文章: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.LocalTimeZone 已经在文档里面说明了,只需要增加参数就行了。 在操作界面找到
2096 0
|
3天前
|
SQL 关系型数据库 数据库
关系型数据库选择合适的数据库管理系统
【5月更文挑战第5天】关系型数据库选择合适的数据库管理系统
240 2
关系型数据库选择合适的数据库管理系统
|
3天前
|
关系型数据库 MySQL BI
关系型数据库选择合适的数据库管理系统
【5月更文挑战第4天】关系型数据库选择合适的数据库管理系统
180 4
关系型数据库选择合适的数据库管理系统
|
1天前
|
Cloud Native 关系型数据库 分布式数据库
祝贺!阿里云PolarDB斩获数据库国际顶会ICDE 2024工业赛道最佳论文
阿里云斩获国际顶会ICDE 2024最佳论文,0.5秒实现数据库跨机实例迁移。
祝贺!阿里云PolarDB斩获数据库国际顶会ICDE 2024工业赛道最佳论文
|
1天前
|
关系型数据库 数据库 数据安全/隐私保护
使用PostgreSQL进行高级数据库管理
【5月更文挑战第17天】本文介绍了使用PostgreSQL进行高级数据库管理,涵盖性能调优、安全性加强和备份恢复。性能调优包括索引优化、查询优化、分区和硬件配置调整;安全性涉及权限管理、加密及审计监控;备份恢复则讨论了物理备份、逻辑备份和持续归档。通过这些实践,可提升PostgreSQL的性能和安全性,确保数据资源的有效管理。
|
3天前
|
存储 Cloud Native 关系型数据库
PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
【5月更文挑战第14天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
31 2
|
3天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB是阿里云自主研发的关系型云原生数据库
【5月更文挑战第14天】PolarDB是阿里云自主研发的关系型云原生数据库
37 3