使用SchemaSpy 6.2.4生成Aurora Postgres 15.4 ER图遇错求助
环境配置
- 数据库:Aurora Postgres 15.4,连接正常,已部署
postgresql-42.7.5.jar - SchemaSpy版本:6.2.4(对应jar包
schemaspy-6.2.4.jar) - Graphviz版本:12.2.1-win64(dot版本12.2.1 (20241206.2353))
- 执行命令:
java -jar schemaspy-6.2.4.jar -t pgsql -dp postgresql-42.7.5.jar -host db-ice-online-uat-central-1.rds.amazonaws.com -port 5432 -db fin -u pguser -p password -s public -o output
遇到的问题及解决办法
一、SQL执行兼容性错误
1. Catalog注释检索失败
收集架构详情时,执行SQL
SELECT datname AS catalog_name, pg_catalog.obj_description(datlastsysoid, 'pg_database') AS catalog_comment FROM pg_catalog.pg_database WHERE datname = :catalog ;检索catalog 'finance'注释失败,错误提示:ERROR: column "datlastsysoid" does not exist Position: 60
原因:Postgres 12及以后版本移除了datlastsysoid字段,SchemaSpy 6.2.4的pgsql模板未适配高版本Postgres。
解决:
- 优先升级SchemaSpy到6.2.5及以上版本,官方已修复该兼容性问题
- 临时修复:修改SchemaSpy的pgsql模板文件,将SQL中的
datlastsysoid替换为oid(pg_database的主键是oid,obj_description可通过它获取数据库注释),修改后的SQL:
SELECT datname AS catalog_name, pg_catalog.obj_description(oid, 'pg_database') AS catalog_comment FROM pg_catalog.pg_database WHERE datname = :catalog ;
2. 存储过程/函数详情检索失败
检索存储过程/函数详情的SQL执行失败,错误提示:ERROR: column p.proisagg does not exist Hint: Perhaps you meant to reference the column "p.prolang". Position: 97
原因:Postgres 11及以后版本用prokind字段替代了proisagg(判断是否为聚合函数)等旧字段,SchemaSpy 6.2.4的模板未适配。
解决:
- 同样优先升级SchemaSpy到兼容版本
- 临时修复:修改函数检索的SQL模板,将
p.proisagg替换为p.prokind = 'a'(prokind取值:'f'=普通函数,'a'=聚合函数,'w'=窗口函数,'p'=过程)
二、Graphviz相关问题
1. 权限拒绝错误
dot -Tpng:cairo relationships.real.compact.dot -orelationships.real.compact.png -Tcmapx: Error: dot: can't open relationships.real.compact.dot: Permission denied
原因:output目录权限不足,dot进程无法读取或写入文件。
解决:
- 给
output目录添加读写权限:Windows系统右键目录→属性→安全,给当前用户分配完全控制权限 - 使用管理员权限打开命令提示符/PowerShell,再执行SchemaSpy生成命令
2. 单元格尺寸过小警告
dot -Tpng:cairo orphans.dot -oorphans.png -Tcmapx: Warning: cell size too small for content
原因:表字段或名称过长,默认布局下单元格无法容纳内容。
解决:
- 在SchemaSpy命令中添加自定义布局参数,增大节点间距和单元格尺寸,示例命令:
java -jar schemaspy-6.2.4.jar -t pgsql -dp postgresql-42.7.5.jar -host db-ice-online-uat-central-1.rds.amazonaws.com -port 5432 -db fin -u pguser -p password -s public -o output -graphviz-l "rankdir=LR;nodesep=0.5;ranksep=0.8"
- 也可以手动编辑生成的dot文件,调整
node的width/height属性,或缩小字体大小
内容的提问来源于stack exchange,提问作者Ali Tc

