免费工具
PostgreSQL 转 ER 图
直接粘贴 pg_dump 的输出,SET 行、ALTER TABLE ONLY 约束和 COPY 块都可以保留,即可得到包含所有表和外键的 ER 图。试试多租户 SaaS 示例,它用到了 IDENTITY 列、enum 类型和分区表。
示例输出
使用方法
粘贴或拖入 pg_dump 输出
纯文本转储、迁移文件,或来自 psql、pgAdmin、ORM 的 CREATE TABLE 语句都可以。无需事先清理转储。
查看每张表及其键
pg_dump 写在文件末尾的键会与各自的表对应起来,每条外键连线都从它自己的列出发;包含多个模式的转储会为每个模式画一个框。
在 Archboard 中打开
保存为新图表后,可以重新排列、添加注释、分享链接,或导出为 SVG 和 PNG。注册只需 Google 或 GitHub 账号。
从 PostgreSQL 导出数据库结构
对数据库运行以下命令,然后粘贴 schema.sql 或拖入该文件:
--schema-only 不导出数据行,--no-owner 和 --no-privileges 会去掉 OWNER TO、GRANT 和 REVOKE 行。加上 --schema=sales 可只导出一个模式。把 mydb 换成数据库名,需要时加上 -h 和 -U,或改用连接 URI。
pg_dump --schema-only --no-owner --no-privileges mydb > schema.sql
转储中的 PostgreSQL 语法
pg_dump 文件中各语法结构的处理方式:
serial · GENERATED … AS IDENTITY- 读取为普通列,类型保持原样;IDENTITY 或序列默认值不显示。serial 列只有在 PRIMARY KEY 声明时才标为 PK,因为 serial 本身不会创建键。
CREATE TYPE … AS ENUM- enum 类型的名称会成为列类型,例如 order_status;其标签不会列在卡片上。
CREATE SCHEMA- 转储中有多个模式时,每个包含表的模式都会成为包住这些表的框,跨模式的外键会穿过框画出。
ALTER TABLE ONLY … ADD CONSTRAINT- 会读取。pg_dump 把主键、唯一约束和外键写在文件最后,它们会在所有表都读完后再应用。
PARTITION OF- 折叠进父表,按月拆分的表只显示为一张卡片;预览会显示折叠了多少个分区。ATTACH PARTITION 也按同样方式处理。
$$ … $$- 美元引号中的函数和存储过程主体会整体跳过,因此其中的分号不会把语句截断。DO 块中的 CREATE TABLE 和 ALTER TABLE … ADD CONSTRAINT 仍会被读取。
COPY … FROM stdin- 随后的数据行会一直跳过、不被读取,直到结尾的 \. 行。
\restrict- 会被跳过。较新的 pg_dump 版本会在转储前后写入 \restrict 和 \unrestrict 行;这些行以及 \connect 等其他 psql 元命令都会被忽略。
pg_dump 生成的图不包含的内容
- 表数据。COPY 块和 INSERT 语句中的行不会被读取,所以带数据的转储与用 --schema-only 导出的转储画出的图相同。
- 函数、存储过程、触发器和 DO 块代码。它们的主体会被跳过并计数;DO 块中只提取表和约束。
- 行级访问策略(RLS)、GRANT 和 REVOKE,以及对象所有者。谁可以读取或修改某张表不会出现在图上。
- 运行中的 PostgreSQL 服务器上的任何信息。不会建立连接,因此不显示表大小、行数和已安装的扩展。
PostgreSQL 常见问题
应该使用哪些 pg_dump 选项?
pg_dump --schema-only --no-owner --no-privileges 的输出最短,但任何纯文本转储都可以使用,带数据的也行。用 -Fc 生成的自定义格式归档不是 SQL 文本:请用 pg_restore --schema-only -f schema.sql 加上归档文件名把它转换成 SQL。
多个模式如何显示?
每个包含表的模式都会成为一个框,表放在框内,因此 public、billing 和 audit 会分开显示,它们之间的外键会穿过框画出。只想画一个模式时,可以用 --schema=名称(简写 -n)单独导出它。
分区表会怎样处理?
用 PARTITION OF 创建、或之后用 ATTACH PARTITION 挂上的分区会折叠进父表,因此拆成十二个月度分区的 payments 表只显示为一张卡片。预览会注明折叠了多少个分区。
会显示 enum 和自定义类型吗?
用 CREATE TYPE … AS ENUM 创建的 enum 会作为列类型使用,因此 status 列显示 order_status,但不会列出 enum 的标签。域和复合类型不会画成卡片;使用它们的列仍会按原样显示类型名。
粘贴转储时会保存什么吗?
预览不会被保存。选择“在 Archboard 中打开”后,绘制出的图表,包括表卡片、列名和类型、模式框以及连线,会作为新图表保存到你的工作区中。之后对数据库的修改不会更新它。
PostgreSQL ER 图工具免费吗?
是的。粘贴转储和查看图表无需账号。在 Archboard 中打开图表需要一个免费账号。