分页导出HTML表格需用<table>+page-break-inside: avoid+@media print重置样式,补全页码;ER图应按业务域拆分、换neato引擎、注释控字段名、导出PDF,并同步DDL变更与权限路径。
分页查询结果怎么导出成可打印的 HTML 表格?
直接用 select ... limit offset, size 拿数据没问题,但打印时表格常被截断、页眉页脚缺失、列宽崩坏。核心不是“能不能导出”,而是“导出后能否在浏览器打印预览里保持结构完整”。
- 避免用
display: flex或float布局表格容器——打印引擎不认这些,会把表拆得七零八落 - 给
<table>加style="page-break-inside: avoid;",防止行被切到两页中间 - 用
@media print重置字体大小、边距和颜色:color: #000; background: transparent;,否则浅色背景+白色字=白纸一张 - 导出前手动补全总页数和当前页码:后端算好
total_count // page_size + 1,前端塞进<footer>,别依赖 JS 打印钩子——它不可靠
ER 图怎么自动生成又不糊成一团?
用 graphviz 或 dbdiagram.io 导出 PNG 很容易,但放大看字段名挤在一起、关系线交叉成蜘蛛网,本质是没控制图的布局粒度和语义密度。
- 别一次性导出整库:按业务域拆,比如只跑
users、orders、products三个 schema,用pg_dump --schema-only配合erd -i schema.sql -
erd工具默认用dot引擎,但对复杂关系易绕圈;换成neato或fdr引擎(加参数-l neato),能显著减少连线交叉 - 字段名太长?提前在建模时用注释控制显示内容:
COMMENT ON COLUMN users.email IS 'email (login)';,工具读注释比读原始字段名更可控 - 导出 PDF 优先于 PNG:矢量格式缩放不糊,且支持书签——
erd -o model.pdf -f pdf
规范化流程里,哪些 DDL 变更会破坏 ER 图一致性?
ER 图不是快照,是活的约束映射。一旦 DDL 动了外键、主键或 NOT NULL,图里关系线就可能失效,但工具未必报错。
-
ALTER TABLE orders DROP CONSTRAINT fk_user_id;—— 这条执行后,ER 图里orders → users的线还在,但已失效;必须同步删掉图中对应关系再重生成 - 把
user_id INT改成user_id UUID?类型不匹配会让erd或pgmodeler直接跳过该外键,图里悄无声息消失一条线 - 加了个新外键但没加索引:
CREATE INDEX idx_orders_user_id ON orders(user_id);必须跟上,否则某些工具认为“不可达”,不画线 - 用
ON DELETE CASCADE但没在图例里标注?建议统一用不同线型:实线=RESTRICT,虚线=CASCADE,不然开发查图时根本不知道级联风险
为什么本地生成的 ER 图和生产库对不上?
不是工具问题,大概率是环境差异没对齐。同一套 SQL,在测试库能出图,生产库报 relation does not exist 或漏表,往往卡在权限或 schema 搜索路径上。
- 检查
current_schemas()返回值:生产库可能设了SET search_path TO '$user', public;,而你的用户没同名 schema,导致erd扫不到表 - 用
psql -U user -d db -c "\dt"对比两边可见表清单,重点看是否多出pg_*或information_schema开头的伪表——有些工具默认排除它们,有些则不 - 视图和物化视图默认不参与 ER 图生成,除非显式加
--include-views参数;但物化视图的底层表如果被删,图里仍留着“幽灵节点” - 别信 GUI 工具的“自动连接”:手敲
PGHOST=prod-db psql -c "SELECT version();"确认连的是真生产库,而不是本地 alias 指向的测试实例
ER 图和分页导出看着是边缘需求,但一旦嵌进 CI 流程或文档自动化链路,任何一处路径、权限、引擎参数的微小偏差,都会让下游拿到一张“看起来对、实际错”的图,或者一份“打不开、打不全、打不清”的报表。盯住生成命令里的每一个 flag,比盯代码逻辑还重要。











