WebStorm Database 工具需手动选择同类型对象比较并确认迁移逻辑才能生成可靠SQL脚本;必须确保数据源已连接、可写且元数据已刷新,预览时需核对增删改差异及类型映射,导出后须人工校验权限、事务和环境适配。

WebStorm 的 Database 工具能自动生成 SQL 脚本,但不是“一键导出”——它依赖你选对对象、设对比较目标,并手动确认迁移逻辑。直接用 Compare 和 Migrate 才能生成可靠脚本,盲目右键导出会漏结构或权限。
选对比较对象:必须同类型、可 introspect
WebStorm 只允许比较相同类型的数据库对象,比如两个 schema、两张 table 或两个 view。跨类型(如 schema vs table)或未成功内省的对象(节点为空、双击报错)无法触发比较。
- 先确保两个数据源都已连接成功(右下角绿色圆点),且已执行过
Refresh Database(Ctrl+F5) - 在
Database工具窗口中,按住Ctrl(Windows/Linux)或Cmd(macOS)点击两个同类型对象(例如两个publicschema) - 右键 →
Compare structure with...,或直接按Ctrl+D - 如果菜单灰掉,说明至少一个对象未加载元数据,或类型不匹配(比如一个是
myschema,另一个是information_schema)
生成脚本前必须检查“目标”是否可写
生成的脚本默认以“使目标等于来源”为目标,但 WebStorm 不校验目标库是否有 DDL 权限。若目标用户只有 SELECT,脚本会生成 CREATE TABLE 却执行失败。
- 目标数据源需提前确认:用户有
CREATE、ALTER、DROP权限(PostgreSQL 需USAGE+CREATEon schema;MySQL 需CREATE、ALTER、DROPon database) - 在
Migrate对话框中,Target字段必须指向一个**已连接且可写**的数据源节点,不能是只读连接或未激活的配置 - 若目标是本地 SQLite 文件,确保文件路径可写,且未被其他进程锁定
脚本预览里要手动核对三类变更
WebStorm 生成的脚本不是“拿来就跑”,它把差异转为 DDL,但不会处理数据迁移、外键依赖顺序、或跨 schema 的引用。你得盯住颜色标记和 DDL 差异标签。
-
Green行 = 来源有、目标无 → 将生成CREATE语句(注意:不包含索引、约束的完整定义,除非源表已 introspect 完整) -
Yellow行 = 结构不同 → 生成ALTER TABLE ... ALTER COLUMN或ADD COLUMN,但不会自动加NOT NULL约束(除非源列明确设为非空) -
Red行 = 来源删了、目标还有 → 生成DROP,但 WebStorm 默认**不勾选**此项(防误删),需手动勾选才加入脚本 - 务必切换到
DDL Differences标签页,确认字段类型映射是否合理(例如TEXT→VARCHAR(255)是否符合预期)
导出脚本后别直接执行,先做两件事
生成的脚本只是 DDL 拼接,没有事务包装、没有错误回滚、也不适配所有目标环境。直接执行容易卡在权限或语法错误上。
- 复制脚本内容,粘贴到新
.sql文件中,再用Ctrl+Enter执行 —— 这样能分步看到哪条失败,而不是整个脚本中断 - 若目标是生产库,**必须**手动在每条 DDL 前加注释或条件判断,例如:
-- ONLY IF NOT EXISTS或IF NOT EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'users') - 特别注意:WebStorm 不生成
GRANT语句,权限变更需单独处理;也不处理序列(PostgreSQLserial)、自增(MySQLAUTO_INCREMENT)的起始值同步
真正容易被忽略的是:脚本生成基于当前 introspection 快照,不是实时结构。改完表再刷新一次元数据,否则脚本可能基于旧状态生成。


















