datagrip里oracle转pg,深度解析:Oracle数据库SYSDATE到PostgreSQL数据库最佳转换

本文探讨了在Oracle数据库到PostgreSQL迁移中如何替换SYSDATE函数,建议使用clock_timestamp结合服务器时区转换以模拟SYSDATE行为。文章详细分析了PostgreSQL的日期/时间函数,并提醒注意客户端时区和夏令时的影响。
摘要由CSDN通过智能技术生成

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

本文讨论了在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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值