0

我已经使用 SQL developer 从给定模式中的所有表中导出了所有行。生成一个包含插入语句的 sql 文件。我可以使用它在目标数据库 EDB(postgres)中导入数据吗?目标 Db 具有与 Source DB 中相同的表。它会起作用吗?

我也有 Dbeaver。如果我从 Dbeaver 中的 oracle DB 导出数据并创建插入脚本。这会比使用从 sql developer 生成的 sql 脚本更好吗?请建议一些工作选项。谢谢你 。

4

2 回答 2

0

这取决于导出的完成程度。

一个 dbms 的备份通常会写出一系列 SQL 语句。这些是(除其他外)将数据放入表中的 INSERT 语句。

您可能缺少的最重要的部分是 TABLE CREATE 命令。如果没有,则没有要插入的表(或具有不匹配列集的表)。

我建议您查看由 pg_dump 创建的 postgres 数据库的备份。那应该澄清一些事情。

于 2020-07-06T09:27:15.727 回答
0

嗯,第一件事是 SQL Developer 将使用 ANSI SQL 将行导出为插入语句,所以通常它应该可以工作。但是,您必须考虑数据类型转换,因为导出为插入是为了在另一个 Oracle 数据库中使用。

在这里,您可以看到 Oracle 和 PostgreSQL 之间可能的数据类型转换。

Oracle type                  Possible PostgreSQL types
CHAR                         char, varchar, text
NCHAR                        char, varchar, text
VARCHAR                      char, varchar, text
VARCHAR2                     char, varchar, text, json
NVARCHAR2                    char, varchar, text
CLOB                         char, varchar, text, json
LONG                         char, varchar, text
RAW                          uuid, bytea
BLOB                         bytea
BFILE                        bytea (read-only)
LONG RAW                     bytea
NUMBER                       numeric, float4, float8, char, varchar, text
NUMBER(n,m) with m<=0        numeric, float4, float8, int2, int4, int8,boolean, char, varchar, text
FLOAT                        numeric, float4, float8, char, varchar, text
BINARY_FLOAT                 numeric, float4, float8, char, varchar, text
BINARY_DOUBLE                numeric, float4, float8, char, varchar, text
DATE                         date, timestamp, timestamptz, char, varchar, text
TIMESTAMP                    date, timestamp, timestamptz, char, varchar, text
TIMESTAMP WITH TIME ZONE     date, timestamp, timestamptz, char, varchar, text
TIMESTAMP WITH               date, timestamp, timestamptz, char, varchar, text
LOCAL TIME ZONE 
INTERVAL YEAR TO MONTH       interval, char, varchar, text
INTERVAL DAY TO SECOND       interval, char, varchar, text

所以答案总是取决于你的数据模型有多复杂。

于 2020-07-06T09:27:29.080 回答