Navicat 17 不支持定时监控表空间剩余容量,因其自动运行模块仅预置备份、同步等操作,不提供查询+判断+告警的复合逻辑;需借助外部脚本与系统调度或数据库原生事件实现。

Navicat 17 本身不能设置“定时监控表空间剩余容量”的图形化定时任务——它没有内置的表空间监控动作,也不支持在自动运行中直接执行自定义 SQL 查询并触发告警。
为什么 Navicat 17 的「自动运行」里找不到表空间监控选项
Navicat 的「自动运行」模块只接受预定义操作类型,比如 备份数据库、数据同步、运行 SQL 文件 等。它不提供“查询系统视图 + 判断阈值 + 发送通知”这类复合逻辑的原生支持。你无法在左侧「可用的工作」列表中拖出一个叫“检查 datafile 剩余空间”或“监控 pg_tablespace”的条目。
常见错误现象包括:
- 试图新建查询并保存为
.nq文件后拖进批处理作业,但执行后无任何输出或日志 —— 因为 Navicat 不会自动捕获查询结果做条件判断 - 在「自动运行」中勾选了邮件通知,但收不到告警 —— 因为邮件功能只响应作业成功/失败状态,不解析 SQL 返回值
- 把
SELECT tablespace_name, pg_size_pretty(available) FROM ...直接写进.nq并运行,结果只是在 Navicat 界面弹出结果集,不会写入文件或触发后续动作
可行方案:用「运行 SQL 文件」+ 外部脚本判断 + 系统调度
本质是把监控逻辑拆解为三步:查(SQL)、判(Shell/PowerShell 脚本)、报(邮件或日志)。Navicat 只承担最轻量的“执行 SQL”环节。
具体操作建议:
- 新建
check_tablespace.sql,内容为针对目标数据库的查询语句:
MySQL 示例:SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb FROM information_schema.tables GROUP BY table_schema;
PostgreSQL 示例:SELECT spcname, pg_size_pretty(pg_tablespace_size(oid)) FROM pg_tablespace; - 在 Navicat 中右键连接 → 「运行 SQL 文件」→ 选择该文件,确认能正常返回结果(用于验证语法和权限)
- 不依赖 Navicat 自动运行调度,改用操作系统级定时器:
Linux:crontab -e添加一行:0 2 * * * /usr/bin/mysql -u monitor -p'pass' -D information_schema -e "source /path/to/check_tablespace.sql" > /tmp/ts_usage.log 2>&1 && /path/to/analyze_ts.sh
Windows:用任务计划程序调用 PowerShell 脚本,先执行mysql.exe -u ... -e "source ...",再用Select-String检查ts_usage.log是否含"size_mb > 5000"等条件 - 告警必须由外部脚本完成:Navicat 不提供条件分支能力,所有“如果剩余mail、
Send-MailMessage或企业微信 webhook
替代路径:直接用数据库原生事件调度器(推荐)
如果你用的是 MySQL 8.0+ 或 PostgreSQL,更干净的做法是绕过 Navicat,完全在数据库内实现监控。
例如 MySQL:
- 确保
event_scheduler已启用:SET GLOBAL event_scheduler = ON; - 创建事件定期写入监控表:
CREATE EVENT check_tablespace_daily ON SCHEDULE EVERY 1 DAY DO INSERT INTO db_monitor.log_tablespace SELECT NOW(), table_schema, SUM(data_length) FROM information_schema.tables GROUP BY table_schema; - 再另建一个事件或外部脚本定时查
log_tablespace表,对异常值发通知
这个方案的好处是:不依赖客户端是否开机、不占用 Navicat 进程、日志可审计、权限收敛在数据库层。
真正容易被忽略的点是:Navicat 的「运行 SQL 文件」动作本身不返回退出码,也无法将查询结果传给下一个环节。所有判断和响应都得落在外部,否则所谓“自动化监控”只是定时刷一次屏幕而已。


















