10分钟用 Mathesar 搭建低代码数据管理面板

38 次阅读 0 点赞 0 评论 10 分钟原创技术教程

用 Docker 快速部署 Mathesar,连接 PostgreSQL 数据库,通过可视化界面完成数据查改、筛选、关联查询和表单收集。让非技术队友自主管理数据,摆脱反复跑 SQL 的琐碎工作。

#Docker #PostgreSQL #低代码 #数据管理 #开源工具 #自托管
10分钟用 Mathesar 搭建低代码数据管理面板

10分钟用 Mathesar 搭建低代码数据管理面板

上周运营又跑来找我:「能不能导出上个月 27 号之后注册的用户列表?只要邮箱和城市。」一行 SQL 的事,但这已经是本月第八次类似请求。

更麻烦的是,有些数据需要运营自己录入。他们没有数据库权限,只能通过我建的内网表单或直接在群里发 Excel,最后我再手动导进去。时间全浪费在来回沟通上。

这篇教程带你用 Mathesar 搭一个开箱即用的数据管理面板。完成之后,你能从零部署到实际使用跑通全流程,运营同事也能直接在浏览器里查数据、录数据、看关联记录,彻底摆脱「人形 SQL 解释器」的角色。


准备环境

开始前确认以下工具就位:

  • Docker + Docker Compose:Mathesar 官方推荐的部署方式。Docker 24.x 和 Compose v2.20.3 均可。
  • 一个 Postgres 数据库(可选):已有实例可直接连接;没有也没关系,后续用 Docker 一并启动。
  • 基本命令行知识:会 cddocker compose 即可,不需要接触 Svelte 或 Django。

⚠️ 为什么强调 Docker?Mathesar 依赖多个服务(Django 后端、Svelte 前端、Nginx 反向代理等),手动配置容易踩坑。Docker Compose 一条命令搞定所有依赖,也是官方首推方式。


Docker Compose 一键部署

第一步:获取官方 docker-compose.yml

在本地创建空目录,拉取 Compose 文件:

bash 复制代码
mkdir mathesar-demo && cd mathesar-demo
curl -o docker-compose.yml https://raw.githubusercontent.com/mathesar-foundation/mathesar/main/docker-compose.yml

打开文件会看到定义了 postgresredisdjangonginx 四个服务。重点看对外暴露的端口和数据库连接信息,无需深究每个细节。

第二步:调整端口和数据库密码

默认 Compose 暴露 80 端口。如果本机已有服务占用,改成别的比如 8080。同时修改 Postgres 环境变量密码(默认 mathesar,生产环境建议替换):

bash 复制代码
sed -i 's/- "80:80"/- "8080:80"/' docker-compose.yml

用编辑器直接改也行。改完后启动服务:

bash 复制代码
docker compose up -d
docker compose ps

启动需要拉取镜像,等半分钟左右。看到四个容器都 running 说明正常。

💡 数据不经过公网、不走第三方 SaaS,全部在你自己的服务器上。Mathesar 底层直接用 Postgres 的 Role 和 Privilege 做权限控制,后续给同事开账号也只能访问授权部分数据。

第三步:访问并完成初始化

浏览器打开 http://localhost:8080,看到 Mathesar 登录页。首次进入注册管理员账号,按提示填写邮箱和密码。

登录后点击 "Add Database" 连接数据库:

  • 使用 docker-compose 自带的 Postgres:Host 填 postgres(Docker 网络内服务名),Port 5432,库名 mathesar,用户名密码与 Compose 里的 POSTGRES_USER / POSTGRES_PASSWORD 一致。
  • 连接已有数据库:填对应主机、端口、库名和凭据。

连接成功后进入类似电子表格的界面——Mathesar 核心工作区。所有 Postgres 概念(Schema、Table、Column、Constraint)在左侧导航栏里,操作从写 SQL 变成点点鼠标。


实战:搭建客户关系管理面板

用一个完整案例把 Mathesar 用起来:搭建简易 CRM 面板,让运营自主录入客户信息、查记录、看关联数据

1. 创建数据库结构

左侧 "Schemas" → 选择默认 schema(通常 public)→ "Create Table"。

customers 表:

字段名 类型 说明
id Integer / Primary Key 默认自带
name Text 客户姓名
email Email 邮箱(Mathesar 提供自定义 Email 类型,自带格式校验)
city Text 城市
signup_date Date 注册日期
notes Text 备注

逐个添加字段,类型直接下拉选。Email 类型会在数据库层面加 CHECK 约束,确保存入合法邮箱——比应用层校验更靠谱,即使绕过 UI 直接操作 DB,数据也不会脏。

2. 录入和筛选数据

切换到 "Table" 视图,看到空白电子表格。点击底部 "+ Add Record" 逐条录入。

录了几条数据后,点击列头漏斗图标筛选,比如 city 为 "杭州" 的记录。Mathesar 自动生成底层 SQL 查询。

💡 Mathesar 底层走的是 Postgres 索引。表建了索引,筛选也会走索引,性能不会差。筛选条件可以保存,随时调用。

3. 建关联表和关系

实际场景里,一个客户对应多个订单。再建 orders 表:

字段名 类型 说明
id Integer / Primary Key -
customer_id Link → customers.id 外键关联
product_name Text 商品名
amount Money/Currency 金额
order_date Date 下单日期

customer_id 选 "Link to another table" 指向 customers 表。底层就是创建 Postgres Foreign Key,Mathesar 用图形化操作代替了 ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ...

建完关系后打开某条客户记录,页面下方自动列出该客户所有订单。点击订单直接跳转详情页——这种一对多关联的可视化,原生 psql 或 DBeaver 很难做到。

4. 用 Explorer 做数据查询

运营想看「本月各城市的客户数量和消费总额」,用 Mathesar 的 Data Explorer

  1. 侧边栏点击 "New Exploration"
  2. 选择主表 customers
  3. 添加 Join,关联 orders
  4. Group By 选 city
  5. Aggregation 添加 COUNT(id) 和 SUM(amount)
  6. 点击 "Save" 生成结果视图

像搭积木一样不用写 SQL,最终生成的 SQL 在 Explorer 底部能看到。对照学习 SQL 也是好方式。

5. 建表单收集外部数据

一线销售用手机录入客户信息,用 Form Builder

  1. 选中 customers 表 → "Create Form"
  2. 勾选要收集的字段(name、email、city),隐藏不需要填写的字段(notes)
  3. 设置必填/选填
  4. 保存后 Mathesar 生成公开链接,发给销售

填完的数据直接作为新记录写入 Postgres 表,不需要中间环节、不需要导出导入。表单是响应式的,手机填写体验很好。


常见问题与踩坑提醒

Q1:启动后 8080 端口被占用?

lsof -i :8080netstat -tunlp | grep 8080 查占用进程,杀掉或者在 Compose 文件里换别的端口如 8888,记得同时修改映射前后端口 - "8888:80"

Q2:连不上已有 Postgres?

最常见原因是 Postgres 没配置远程访问。检查 pg_hba.conf 是否允许了应用服务器 IP,postgresql.conflisten_addresses 是否为 '*'。Postgres 也在 Docker 里的话,确保两个容器在同一 Docker network 下。

Q3:数据量大了会不会卡?

Mathesar 本身不存数据,只是 Postgres 的外壳。性能瓶颈在 Postgres 本身。该加的索引加上,该做分表时做分表,Mathesar 会跟着受益。

Q4:能多人协作吗?

可以。Mathesar 的用户权限体系直接映射到 Postgres Roles。UI 设置完角色和权限后,Mathesar 会生成对应 GRANT/REVOKE 语句。给运营设置只能读写的角色,给开发设置能修改 schema 的角色——权限粒度完全和 Postgres 一致。

以下是连接已有 Postgres 时创建只读角色的参考 SQL:

sql 复制代码
CREATE ROLE ops_readonly LOGIN PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE mydb TO ops_readonly;
GRANT USAGE ON SCHEMA public TO ops_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO ops_readonly;
-- 如需读写权限替换 SELECT 为 ALL PRIVILEGES
-- Mathesar 会复用这些 Role 做 UI 层面的权限控制

总结

整个流程做了四件事:

  1. 部署:Docker Compose 一键拉起,零手动配置
  2. 连接:对接现有或新建的 Postgres 数据库
  3. 建模:用 UI 建表、建字段、建关联关系,底层自动同步到 Postgres
  4. 使用:表格视图查改数据、Explorer 做聚合查询、Form 收集外部数据

不到半小时,得到一个生产可用的低码数据面板。运营自主查数据、录数据、看关联关系,从「人肉 SQL 机」变成「基础设施维护者」,这才是理想的技术工作状态。

下一步建议:

  • 部署到测试环境,用真实数据跑一跑
  • 研究官方 Postgres Role 权限配置文档,设置细粒度权限
  • 有定制需求的话,Mathesar 是 Django + Svelte 全开源的,直接 fork 代码修改

GitHub:https://github.com/mathesar-foundation/mathesar
官方文档:https://docs.mathesar.org/

最后更新:2026-06-07T10:02:48

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...