深度解析:Oracle数据库SYSDATE到PostgreSQL数据库最佳转换

本文深入探讨了在Oracle到PostgreSQL迁移中如何替换SYSDATE函数,推荐使用clock_timestamp()。文章指出,尽管clock_timestamp()在事务中返回动态时间,但还需考虑时区和DST影响。文中提供了示例和建议,以确保迁移后的日期时间处理正确性。
摘要由CSDN通过智能技术生成

本文讨论了在Amazon RDS和Aurora 中使用PostgreSQL数据库时,与日期/时间相关的函数,并确定PostgreSQL数据库里的clock_timestamp()函数与Oracle中的SYSDATE函数最匹配。同时我们可以自定义基于clock_timestamp()的改进函数(设置迁移的Oracle数据库服务器时区),具体参考“建议”部分中所述。

作者:Baji Shaik and Sudip Acharya
来源:https://aws.amazon.com/cn/blogs/database/converting-the-sysdate-function-from-oracle-to-postgresql/
译者:多米爸比

在AWS Cloud 中迁移Oracle数据库到PostgreSQL数据库是一个复杂的过程,从最初评估阶段到迁移转换阶段,多个阶段过程中会涉及不同的技术和技能。有关迁移过程的更多信息,请参阅下面几篇文章:

  • Database Migration—What Do You Need to Know Before You Start?

  • Migration process and infrastructure considerations

  • Source database considerations

  • Target database considerations for the PostgreSQL environment


Oracle数据库迁移到Amazon RDS或者Amazon Aurora 环境下的PostgreSQL数据库时,最常见的问题之一是SYSDATE函数。应用程序或存储过程以及触发器中最常用的日期/时间函数是SYSDATE。

建表字段如creation_date,last_updated_date,approved_date,在做更新操作时会被更新为设置的默认值SYSDATE或通过触发器赋值为SYSDATE。


本文描述了在PostgreSQL数据库里替代Oracle数据库SYSDATE函数的一种方法。

在评估Oracle和PostgreSQL的日期/时间函数时,要考虑三个方面:

  • Statement级别或者事务级别的影响

  • 客户端时区设置的影响

  • Daylight Saving Time (DST)


PostgreSQL日期/时间功能概述

PostgreSQL提供了几个函数,这些函数返回与当前日期和时间有关的值。其中一些功能是SQL标准功能,而其他功能是非SQL标准功能。


支持的SQL标准函数

以下是受支持的SQL标准函数:

  • CURRENT_DATE

  • CURRENT_TIMESTAMP/CURRENT_TIMESTAMP(precision)

  • CURRENT_TIME/CURRENT_TIME(precision)

  • LOCALTIME/LOCALTIME(precision)

  • LOCALTIMESTAMP/LOCALTIMESTAMP(precision)

这些函数返回当前事务的开始时间。如果您在同一事务中多次运行这些函数,则值不会更改。这是一个内部功能特性。如果要在整个事务中使用一致的时间戳,可以使用这些功能。


CURRENT_DATE

CURRENT_DATE函数以yyyy-mm-dd格式显示当前日期。请参见以下代码:

postgres=> select CURRENT_DATE; current_date-------------- 2020-01-03(1 row)


CURRENT_TIMESTAMP/CURRENT_TIMESTAMP(precision)

CURRENT_TIME/CURRENT_TIME(precision)

这些函数返回带时区的当前日期和时间。您可以选择precision参数控制时间精度。此精度舍入小数位数(毫秒)。请参见以下代码:

postgres=> select CURRENT_TIMESTAMP;       current_timestamp------------------------------- 2020-01-03 04:38:15.662514+00(1 row) postgres=> select CURRENT_TIMESTAMP(2);     current_timestamp--------------------------- 2020-01-03 04:38:19.75+00(1 row) postgres=> select CURRENT_TIME;    current_time-------------------- 04:40:29.409115+00(1 row) postgres=> select CURRENT_TIME(2);  current_time---------------- 04:40:38.01+00(1 row)


LOCALTIME/LOCALTIME(precision)

LOCALTIMESTAMP/LOCALTIMESTAMP(precision)

这些函数返回没有时区的当前日期和时间。您可以选择precision参数控制时间精度。此精度舍入小数位数(毫秒)。请参见以下代码:

postgres=> select LOCALTIMESTAMP;
       localtimestamp
----------------------------
 2020-01-03 04:42:39.405423
(1 row)
 
postgres=> select LOCALTIMESTAMP(2);
     localtimestamp
------------------------
 2020-01-03 04:42:41.97
(1 row)
 
postgres=> select LOCALTIME;
    localtime
-----------------
 04:42:24.022253
(1 row)
 
postgres=> select LOCALTIME(2);
  localtime
-------------
 04:42:32.01
(1 row)


支持的非SQL标准函数

以下是受支持的非SQL标准函数:

  • transaction_timestamp()

  • statement_timestamp()

  • clock_timestamp()

  • timeofday()

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值