PostgreSQL迁移时目标schema不生效需在连接字符串中添加currentSchema=myschema;Oracle/达梦需用对应schema用户登录或手动指定全大写schema名;MySQL的database即schema,需在URL中指定;DBeaver列映射中目标表名为空时才使用连接参数schema。

PostgreSQL 迁移时目标 schema 不生效?检查 currentSchema 连接参数
DBeaver 默认把数据导入到 public schema,即使你在目标库手动创建了 myschema 并选中它,也可能不生效。根本原因不是 DBeaver 界面操作问题,而是 PostgreSQL JDBC 驱动没收到“默认 schema”指令。
解决办法是显式在连接字符串里加 currentSchema=myschema:
- 右键已建好的 PostgreSQL 连接 → 编辑连接 → 切到 连接设置 → 高级
- 找到
connectionProperties或直接在 URL 末尾追加:?currentSchema=myschema - 保存后重新连接,再跑数据迁移,目标表就会落在指定 schema 下
注意:如果目标 schema 不存在,DBeaver 不会自动创建,需提前用 CREATE SCHEMA myschema 建好;且用户对该 schema 必须有 USAGE 和 CREATE 权限。
Oracle / 达梦等库的目标 schema 怎么设?看驱动是否支持 schema 参数
Oracle 和达梦(DM8)这类库的 JDBC 驱动对 schema 的处理逻辑和 PostgreSQL 不同:它们通常把 schema 当作登录用户名的同义词,而不是运行时可切换的命名空间。
所以你在 DBeaver 连接配置里填的 schema 参数,实际只影响元数据加载范围,不影响数据写入位置 —— 写入仍由目标连接的登录用户决定。
正确做法是:
- 确保目标连接使用的账号,本身就是你要写入的 schema 所属用户(比如用
HX_PLAT_NEW用户连 Oracle,才能把数据写进HX_PLAT_NEWschema) - 如果必须用其他账号(如
dba),则在迁移向导的「目标表名」字段里,手动补全HX_PLAT_NEW.table_name格式 - 达梦 DM8 还额外要求连接串里带
schema=HX_PLAT_NEW,否则建表语句可能漏掉 schema 前缀,导致对象建到SYSDBA下
MySQL 没有 schema 概念?那 database 就是它的 schema
MySQL 的 database 等价于其他数据库的 schema。DBeaver 导入时只要目标连接里指定了 database=your_db,所有表就自然落在这个库下。
但要注意两个坑:
- 如果连接 URL 里没写
database(比如只写了jdbc:mysql://host:3306/),DBeaver 会默认连到空上下文,此时迁移时选“新建表”,表会建在information_schema或报错 - 执行 SQL 脚本导入时,脚本里若含
USE other_db,会覆盖连接默认库 —— 所以要么删掉脚本里的USE,要么确保它和目标库一致
跨库迁移时目标 schema 映射失败?重点查列映射面板里的“目标表名”
哪怕连接参数都对,DBeaver 数据传输向导里仍可能悄悄绕过你的 schema 设置 —— 因为它允许你在「列映射」页手动修改每张表的「目标表名」,而这个字段是自由文本,可以填成 public.users、myschema.orders,甚至 otherdb.otheruser.logs。
常见现象是:你点了“新建表”,也设置了 currentSchema,但最后表还是出现在 public 下。这时请打开映射面板,逐个检查「目标表名」一栏:
- 如果是空的或只有表名(如
users),说明走的是连接默认 schema - 如果填了带点号的全名(如
myschema.users),那就以它为准,currentSchema参数会被忽略 - Oracle / 达梦下,这里还必须填全大写(
HX_PLAT_NEW.USERS),小写或混合大小写可能导致建表失败
最稳妥的做法是:统一在连接参数里设好默认 schema,然后在映射面板里留空「目标表名」,让 DBeaver 自动生成带 schema 前缀的建表语句 —— 这样既清晰又少出错。











