我需要将数据从 AWS RDS Oracle 数据库实例迁移到本地 PostgreSQL 数据库, 我已经在 PostgreSQL 中手动创建了数据库表(Oracle 表的副本),现在我正在尝试加载数据,我使用的方法是:
这给了我一堆插入语句,比如如果有 10 行数据,那么我将得到 10 个插入语句,然后我通过
pgadmin
在 PostgreSQL 中执行这些插入语句。
但问题在于日期、时间、时间戳数据类型。以oracle为例:
date : 01-SEP-22,
time_stamp: 17-MAR-23 09.36.33.000000000 AM
在 PostgreSQL 中:
date : 2022-09-01,
time_stamp : 2023-05-03 15:36:32.74049
请让我知道解决此问题和迁移数据迁移的最佳方法?
在 SQL Developer 中,导出数据之前,将
NLS_DATE_FORMAT
、NLS_TIMESTAMP_FORMAT
和 NLS_TIMESTAMP_TZ_FORMAT
会话参数更改为您所需的格式:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
-- ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF TZR';
然后,当您运行导出时,它应该会生成 ISO8601 格式的日期/时间戳。
注意:在Oracle中,
DATE
是一种二进制数据类型,由7个字节组成,分别代表:世纪、世纪年份、月、日、小时、分钟和秒。它ALWAYS具有这些组件,因此它始终具有日期和时间组件。如果您将 DATE
存储在时间部分始终为午夜的位置,那么您可以使用:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
否则,您可能不想将 Oracle
DATE
迁移到 PostgreSQL DATE
,而是希望将它们迁移到 TIMESTAMP
,以便保留 Oracle DATE
的时间部分。