Navicat for PostgreSQL 无“schema-only/data-only”开关,需用“数据传输”工具分离导出:取消勾选“创建记录”得结构(注意schema路径、忽略所有者/权限),禁用触发器+用INSERT语句+手动加SET CONSTRAINTS得数据;还原须先结构后数据,并处理扩展、序列等依赖。

Navicat 里没有直接叫 “schema-only” 或 “data-only” 的开关
Navicat for PostgreSQL 的「备份数据库」功能(右键 → 备份)本质是调用 pg_dump,但它把参数封装进图形界面,不暴露原始命令行选项。所以你找不到像 pg_dump --schema-only 那样的单选按钮。想分离导出结构和数据,必须绕开「备份」入口,改用「数据传输」工具——这才是官方支持的、可控的分离路径。
用「数据传输」导出纯结构:取消勾选“记录”,但要手动补 schema 路径
结构导出的核心是跳过数据,但容易漏掉关键上下文:
- 进入
工具 → 数据传输,源选 PostgreSQL 连接/数据库,目标选「文件」并指定.sql路径 - 在「选项」里,**必须取消勾选「创建记录」**(这是控制是否导数据的唯一开关)
- 如果源库用了非
publicschema(比如app或sales),导出的CREATE TABLE语句默认不带 schema 前缀,还原时可能建到public下。解决方法:在「数据库对象」页,展开 schema 节点再勾选表,或导出后手动在 SQL 文件开头加SET search_path TO app; - 导出的结构默认含权限和 owner 信息,若目标库无对应用户会报错;可在「选项」→「高级」里勾选「忽略所有者」和「忽略权限」
用「数据传输」导出纯数据:必须先有结构,且禁用触发器
只导数据不是“没结构也能跑”,而是依赖已有表定义。常见失败点:
- 目标库必须已存在同名表、同字段类型、同约束,否则
INSERT或COPY会直接报错 - Navicat 默认生成
COPY语句(速度快),但某些托管环境(如云数据库 RDS)禁用COPY FROM STDIN。需在「选项」→「高级」中勾选「使用 INSERT 语句」 - 若表有触发器(比如审计日志),导入时可能因触发逻辑失败。务必勾选「禁用触发器」(对应
pg_dump --disable-triggers) - 外键约束未提前关闭会导致插入顺序错误;导出的数据文件本身不含
SET CONSTRAINTS ALL DEFERRED,需手动在 SQL 文件开头添加
还原时最容易被忽略的三个细节
结构和数据分两步导出,还原也得按顺序+补操作,否则白忙:
- 先还原结构 SQL(确保所有表、索引、约束就位),再还原数据 SQL;顺序颠倒必报 “table does not exist”
- 结构 SQL 若含
CREATE EXTENSION(如pg_trgm、uuid-ossp),目标库必须已安装对应扩展,否则整段失败 - 数据 SQL 中的
INSERT若含序列值(如id自增列),而目标表序列未重置,会导致主键冲突;还原后应执行SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));


















