我已经使用 SQL developer 从给定模式中的所有表中导出了所有行。生成一个包含插入语句的 sql 文件。我可以使用它在目标数据库 EDB(postgres)中导入数据吗?目标 Db 具有与 Source DB 中相同的表。它会起作用吗?
我也有 Dbeaver。如果我从 Dbeaver 中的 oracle DB 导出数据并创建插入脚本。这会比使用从 sql developer 生成的 sql 脚本更好吗?请建议一些工作选项。谢谢你 。
我已经使用 SQL developer 从给定模式中的所有表中导出了所有行。生成一个包含插入语句的 sql 文件。我可以使用它在目标数据库 EDB(postgres)中导入数据吗?目标 Db 具有与 Source DB 中相同的表。它会起作用吗?
我也有 Dbeaver。如果我从 Dbeaver 中的 oracle DB 导出数据并创建插入脚本。这会比使用从 sql developer 生成的 sql 脚本更好吗?请建议一些工作选项。谢谢你 。
这取决于导出的完成程度。
一个 dbms 的备份通常会写出一系列 SQL 语句。这些是(除其他外)将数据放入表中的 INSERT 语句。
您可能缺少的最重要的部分是 TABLE CREATE 命令。如果没有,则没有要插入的表(或具有不匹配列集的表)。
我建议您查看由 pg_dump 创建的 postgres 数据库的备份。那应该澄清一些事情。
嗯,第一件事是 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
所以答案总是取决于你的数据模型有多复杂。