navicat 不支持自动运行多个批处理作业,其批处理仅为手动触发的串行执行容器,无调度、排队或并发能力;真正自动化需借助系统任务计划器配合 psql/mysql 命令行。
navicat 本身不支持“添加多个批处理作业”并让它们自动并发或排队运行——它的批处理作业是单个、手动触发的实体,不能嵌套、不能调度、也不能自动链式启动。所谓“在自动运行中添加多个批处理作业”,实际是误解了 navicat 的功能边界。
批处理作业 ≠ 可调度任务,只是串行执行容器
Navicat 的「批处理作业」本质是一个 UI 封装:它把多个 .sql 文件按字母顺序读入,逐个调用 psql 或 MySQL 客户端协议执行,每个文件新建一次连接(除非勾选“共享连接”,但那会引发事务干扰)。它没有后台服务、不读取 cron 配置、也不响应系统时间触发。
- 右键数据库 →「批处理作业」→「新建批处理作业」后,你只能手动点击「运行」
- 界面里没有“启用自动运行”“设置定时”“失败重试”等选项
- 即使你建了 5 个不同批处理作业,Navicat 也不会自动挑一个跑;必须挨个点开、挨个点运行
- 作业列表里显示的是名称和创建时间,不是状态队列——它不记录“待执行/运行中/失败”
想真正实现“自动运行多个 SQL 文件”,得绕过 Navicat
如果你的目标是定时、无人值守、可监控地执行一批初始化或迁移脚本,Navicat 不是合适工具。可靠路径只有两条:
-
Windows 用 Task Scheduler +
cmd脚本:写一个.bat,内容类似for %%f in (./migrations/*.sql) do "C:\Program Files\PremiumSoft\Navicat Premium 16\navicat.exe" --run-sql-file "%%f" -c "MyDB"(注意:Navicat 命令行参数极有限,--run-sql-file实际只支持单文件且需已保存连接) -
跨平台推荐 psql / mysql 命令行 + shell:比如
find ./sql/ -name "*.sql" -print0 | sort -z | xargs -0 -I{} psql -U postgres -d mydb -v ON_ERROR_STOP=1 -f {},配合cron或 Windows Task Scheduler 触发 - 关键要加
-v ON_ERROR_STOP=1(psql)或--force(mysql),否则一条错,后续全跳过或静默继续,无法判断是否真成功
批处理作业里最容易被忽略的三个硬限制
即便你坚持用 Navicat 批处理作业,以下三点不处理,大概率执行一半就停住,还找不到原因:
-
SET NAMES utf8mb4和当前连接排序规则不匹配:MySQL 8.0+ 默认用utf8mb4_0900_as_cs,而老脚本常写SET NAMES utf8mb4,服务端直接拒掉整条语句,Navicat 卡在“正在执行”不动 - 文件带 BOM:Windows 记事本保存的
.sql头部有,Navicat 解析成非法字符,报ERROR: unrecognized configuration parameter "SET" - 语句结尾缺分号且跨行:Navicat 只认独占一行的
;或紧跟语句后的;,像CREATE PROCEDURE ... BEGIN ... END里如果END;换行了,它可能把整个块当一条语句,超时或语法错误
真正需要自动化的场景,别在 Navicat 界面里死磕批处理作业。它适合人工验证、小批量调试;一旦涉及顺序依赖、错误中断、日志留存或定时触发,命令行才是唯一可控的出口。











