在 PowerDesigner 中进行逆向工程时排除系统对象,可通过以下方法实现(以最新版 PD 17.7 为例):
方法一:通过对象过滤器排除(推荐)
启动逆向工程
Database
→Reverse Engineer Database
→ 选择数据源进入对象选择界面
在Selection
标签页点击 Filter… 按钮设置过滤规则
-- 通用排除模板(根据DB类型调整):
OBJECT_SCHEMA NOT IN (
'sys', 'information_schema', 'pg_catalog',
'mysql', 'performance_schema', 'dbo'
)
AND OBJECT_NAME NOT LIKE 'sp_%'
AND OBJECT_NAME NOT LIKE 'pg_%'
AND OBJECT_NAME NOT LIKE 'msrep%'
不同数据库的排除方案:
数据库 | 排除条件示例 |
---|---|
SQL Server | SCHEMA_NAME <> 'sys' AND NAME NOT LIKE 'sp_%' |
PostgreSQL | table_schema NOT IN ('pg_catalog','information_schema') |
Oracle | OWNER NOT IN ('SYS','SYSTEM','MDSYS','CTXSYS') |
MySQL | TABLE_SCHEMA NOT IN ('information_schema','performance_schema','mysql') |
- 应用过滤器
✅ 勾选Use filter
并保存规则
方法二:通过选项设置全局排除
打开模型选项
Tools
→Model Options
配置排除规则
路径:Model Settings
→Table
→ Selection
Exclude objects where:
[x] Object name matches: sp_*; ms*; pg_*; __*
[x] Owner matches: sys; dbo; information_schema; pg_*
方法三:逆向工程后批量删除
- 使用查询工具删除对象
Edit
→Query...
执行删除脚本:
-- 示例:删除所有系统表
DELETE FROM %TABLE%
WHERE ObjectType = 'Table'
AND (Owner = 'sys' OR Name LIKE 'sp_%')
- 使用列表编辑器批量删除
Edit
→List Editor
→ 按 Owner 排序 → 全选系统对象 → Delete
特殊技巧:修改元数据查询
编辑逆向工程脚本
Tools
→Resources
→DBMS
→ 选择数据库类型修改系统表查询语句
找到SqlQuery
节点,例如修改表查询:
<SqlQuery id="Tables">
SELECT ... FROM all_tables
WHERE OWNER NOT IN ('SYS','SYSTEM')<!-- 添加排除 -->
</SqlQuery>
常见系统对象标识
数据库 | 系统模式/前缀 |
---|---|
SQL Server | sys , dbo.sp_ , dt_ |
PostgreSQL | pg_ , information_schema |
Oracle | SYS , SYSTEM , DBSNMP |
MySQL | information_schema , mysql |
验证效果
完成过滤后,在逆向工程结果窗口:
- 检查对象列表是否包含系统表
- 查看 SQL 预览窗口的 WHERE 条件
- 确认模型中的对象都是业务对象
重要提示:对于生产环境,建议先在测试库验证过滤规则,避免误删业务对象。不同 PD 版本界面可能略有差异,但核心过滤原理相同。