将数据从oracle DB迁移到postgreSQL DB

问题描述 投票:0回答:1

我需要将数据从 AWS RDS Oracle 数据库实例迁移到本地 PostgreSQL 数据库, 我已经在 PostgreSQL 中手动创建了数据库表(Oracle 表的副本),现在我正在尝试加载数据,我使用的方法是:

  1. 连接到oracle sql Developer工具
  2. 点击表名
  3. 选择导出
  4. 导出数据复选框选中格式为插入
  5. 最后导出

这给了我一堆插入语句,比如如果有 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

请让我知道解决此问题和迁移数据迁移的最佳方法?

postgresql oracle oracle-sqldeveloper amazon-rds pgadmin
1个回答
0
投票

在 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
的时间部分。

© www.soinside.com 2019 - 2024. All rights reserved.