跨 schema 复制需用 DDL+DML 或数据传输向导,目标 schema 必须预先存在且有权限;表名须手动加 schema 前缀(如 staging.users),索引/约束/注释等不自动同步,需单独导出执行。

跨 schema 复制表结构和数据,不能靠“复制粘贴”
直接右键表选“复制”再在另一个 schema 里“粘贴”,DBeaver 不支持——它不是文件管理器。跨 schema 操作本质是 DDL + DML 组合动作,必须走显式建表 + 插入路径,或依赖数据传输向导的 schema 映射能力。
用“数据传输”向导时,目标 schema 必须提前存在且可写
向导本身不创建 schema,只往已有 schema 里写对象。如果目标 schema 不存在,CREATE SCHEMA 得手动执行;如果存在但当前用户没权限在该 schema 下建表,会报错 permission denied for schema xxx。常见错误现象是第 2 步“选择目标”时下拉列表为空,或点完成时报 schema "xxx" does not exist。
- PostgreSQL:确认用户有
CREATE权限在目标 schema 所属 database 下,且 schema 已通过CREATE SCHEMA IF NOT EXISTS target_schema建好 - MySQL:schema 即 database,需确保用户对该 database 有
CREATE和INSERT权限 - Oracle:注意
CREATE ANY TABLE或目标 user 的UNLIMITED TABLESPACE权限,否则建表失败
列映射页里 schema 名不会自动带入,得手动改表名前缀
向导默认把源表名原样写进目标,比如源是 public.users,目标 schema 是 staging,但向导生成的目标表名仍是 users,最终落在默认 schema(如 PostgreSQL 的 public)里。必须在“选择目标”页或“列映射”页,把目标表名手动改成 staging.users 这种带 schema 前缀的完整标识。
- MySQL 不支持 schema.表名语法传入向导,得先切换连接的目标 database 再操作
- PostgreSQL 和 Oracle 支持,但要确保输入格式合法:
schema_name.table_name,不能带引号除非含大小写或特殊字符 - 如果目标 schema 名含大写字母(如
"MySchema"),必须加双引号,否则解析失败
想复制索引、约束、注释?向导默认不搬,得额外处理
“数据传输”向导默认只复制表结构(不含约束)、数据、主键/唯一键定义(仅作为列属性),但外键、索引、CHECK 约束、列注释、表注释全都不会自动同步。容易被忽略的是:目标表即使建了主键,自增序列(如 PostgreSQL 的 serial)也不会自动创建或对齐。
- DDL 同步建议用“导出 DDL”功能:右键源表 →
Generate SQL→Create,复制结果后手动替换 schema 名,再在目标库执行 - 索引和约束建议单独导出:右键表 →
Generate SQL→Constraints或Indexes,检查语句里的 schema 引用是否正确 - 迁移完记得手动调
SELECT setval('schema.table_id_seq', (SELECT MAX(id) FROM schema.table));对齐序列值

















