Mathesar 0.12.0 介绍与选型指南

Mathesar 0.12.0(PostgreSQL 直存型数据管理 Web UI,GPL-3.0 非营利基金会维护)的定位、Django+msar+Caddy 架构、功能特性清单、RPC 最小验证链,以及与 NocoDB/Baserow/Teable 的量化选型对比(星数/许可证/版本节奏均溯源至 2026-10-30)。

MathesarMathesar2026/10/30

Mathesar 0.12.0 介绍与选型指南

目标:说清 Mathesar 0.12.0 是什么、架构如何、能做什么、与同类「表格化数据管理 UI」相比该如何选型。本文所有版本号、功能点、量化数据均来自 mathesar.org 官网、GitHub Releases 与本地真实环境(Ubuntu 22.04 宿主 + Mathesar 0.12.0 + PostgreSQL 17.6 / 16.15 双实例)的实测取证,竞品星数与许可证逐项溯源,查询日期均为 2026-10-30。

一、环境信息

本文取证与实测所用环境如下,所有回显均可在这套环境中复现:

  • 操作系统:Ubuntu 22.04(宿主,Linux 5.15 x86_64)
  • Mathesar:0.12.0(镜像 mathesar/mathesar:0.12.0,约 2.24 GB,镜像构建时间距今约 4 个月,对应官方 2026-07-02 发布的 0.12.0)
  • 内部数据库:PostgreSQL 17.6(Debian 17.6-1.pgdg12+1,pgautoupgrade/pgautoupgrade:17-bookworm 提供,同时承载 Mathesar 自身元数据库 mathesar_django 与示例业务库 warehouse)
  • 外部数据库:PostgreSQL 16.15(Alpine 构建,用于验证 Mathesar 连接「已有 PostgreSQL 实例」的形态)
  • 应用运行时:Python 3.14.6 + Django 4.2.29 + Gunicorn(1 主进程 + 3 worker,WEB_CONCURRENCY=3)
  • 反向代理:Caddy(mathesar/mathesar-caddy:latest),Web 入口 http://localhost:8128
  • msar SQL 层:warehouse 库内实测存在 msar、__msar、mathesar_types 三个 schema,其中 msar schema 下 479 个函数

💡 技术拓展:这一类「给数据库套一层表格 UI」的工具,底层数据存放策略分两派——一派是「直存派」:UI 直接操作用户已有的 PostgreSQL 表,数据永远是标准 PG 表,代表即 Mathesar;另一派是「抽象层派」:数据存入自建的存储结构,UI 提供类电子表格视图,再按需映射到数据库,代表如 NocoDB、Baserow、Teable。直存派不锁定数据、可直接用 psql 继续管理,抽象层派功能更「表格产品化」但引入了自有数据模型。本文主角 Mathesar 属于直存派。

二、软件概述

Mathesar 官网(mathesar.org,查询日期 2026-10-30)的官方定位原文是:

"An intuitive, open-source UI to view, edit, and query Postgres data, with easy deployment and robust access control."(一个直观的开源 UI,用于查看、编辑和查询 PostgreSQL 数据,部署简单、访问控制健壮)

概括成一句话:Mathesar 是一个直接架在 PostgreSQL 之上的、类电子表格操作体验的 Web 数据管理界面,由美国 501(c)(3) 非营利组织 Mathesar Foundation 维护,承诺 100% 开源、永远可自托管。

关键身份信息(均经溯源核实,查询日期 2026-10-30):

维度事实来源
官网mathesar.org(首页标题 "Mathesar - Open source UI for Postgres databases")官网首页抓取
代码仓库github.com/mathesar-foundation/mathesar官网 GitHub 链接
许可证GPL-3.0(GNU GENERAL PUBLIC LICENSE Version 3,仓库根 LICENSE 文件实证,无 premium/enterprise 分区)raw.githubusercontent.com 实抓
维护方Mathesar Foundation,501(c)(3) 非营利组织(官网原文 "maintained by a 501(c)(3) nonprofit")官网首页
GitHub Stars5.2kshields.io /github/stars 徽章 JSON 返回 {"message":"5.2k"}
最新版本0.12.0(2026-07-02 发布)GitHub Releases Atom 订阅源
技术栈Python 3.14.6 + Django 4.2.29 + Svelte 前端构建产物 + Caddy镜像内实测(pip show django、settings 文件、Caddyfile)
支持的数据库仅 PostgreSQL官网定位原文 + 全部 RPC 接口围绕 PG 实现
商业版无(官网仅有 Cloud 托管服务 "Try Cloud for free",无功能阉割的开源/商业双轨)官网导航栏

版本节奏量化(GitHub Releases Atom 源,查询日期 2026-10-30):从 0.7.0 到 0.12.0 共 8 个 release 分布在 9 个月内——0.7.0(2025-10-31)、0.7.1(2025-11-11)、0.8.0(2025-12-20)、0.9.0(2026-02-10)、0.10.0(2026-04-21)、0.10.1(2026-04-26)、0.11.0(2026-05-28)、0.12.0(2026-07-02),平均 5~6 周一个功能版本,迭代活跃且稳定(未见长期断档)。

三、核心架构

Mathesar 采用「Django 单体应用 + msar SQL 函数层 + Caddy 反代」三层结构,全部结论来自对运行中 0.12.0 实例的直接检查:

浏览器
   │  HTTP(:80,本环境映射为宿主 :8128)
   ▼
Caddy 反向代理(mathesar/mathesar-caddy)
   │  /static/* /media/* → 本地文件直出(file_server)
   │  其余 → reverse_proxy mathesar_service:8000
   ▼
Gunicorn + Django(mathesar/mathesar:0.12.0,WSGI config.wsgi)
   │  ├─ Web UI 路由(/auth/login/、/db/...、/administration/...)
   │  ├─ JSON-RPC 2.0 端点 /api/rpc/v0/(modernrpc,107 个方法)
   │  └─ Django ORM → 元数据库 mathesar_django
   ▼
用户 PostgreSQL(warehouse / business / 任意已连接 PG)
      └─ msar / __msar / mathesar_types schema(479 个 SQL 函数,数据操作就地完成)

各层实测证据:

  1. Caddy 层:从 Caddy 容器内读出的 Caddyfile 显示,{$DOMAIN_NAME} 站点内 handle_path /static/*、/media/* 用 file_server 直接吐文件(带 precompressed br zstd gzip),其余流量 reverse_proxy mathesar_service:8000;另设 respond /caddy-health-check 200 供自身探活。
  2. 应用层:ps 实测主进程为 gunicorn config.wsgi -b 0.0.0.0:8000 --chdir /code --timeout 180,3 个 worker(对应 WEB_CONCURRENCY=3);Python 3.14.6、Django 4.2.29;静态资源由 WhiteNoise 中间件配合 CompressedManifestStaticFilesStorage 管理(settings 源文件实证)。
  3. API 层:Django 路由文件(mathesar/urls.py)实测含 path('api/rpc/v0/', views.MathesarRPCEntryPoint.as_view()),底层是 modernrpc 库;settings 中 MODERNRPC_METHODS_MODULES 注册了 22 个方法模块,运行时枚举共 107 个 RPC 方法(含 system.listMethods 等 4 个系统方法)。
  4. SQL 层:登录示例库 warehouse 执行 \dn 实测存在 5 个 schema——msar(479 个函数,承担表/列/记录/查询等数据面操作)、__msar(内部辅助)、mathesar_types(Mathesar 自有数据类型的支持函数)、用户业务 schema(如 Library Management、public)。用户数据始终是标准 PostgreSQL 表,Mathesar 卸载后业务表原样保留。
  5. 元数据层:用户账号、数据库连接配置、Explorations 查询定义、表单等存于自带的 mathesar_django 元数据库(连接配置 POSTGRES_HOST=mathesar_db,实测环境变量与 common-data JSON 中 "internal_db" 字段一致)。

这套架构的直接推论:Mathesar 对业务库的「侵入」仅限于在库内安装 msar 函数 schema(并在连接时记录 last_confirmed_sql_version,实测值为 0.12.0),不迁移、不改写用户表结构本身。

四、功能特性

以下特性均在 0.12.0 实例上验证过存在性与可用性(验证手段标注在括号内):

功能域说明实测依据
表格化数据管理对 PG 表做行级增删改查、列类型管理、主键/外键管理,操作体验类电子表格RPC records.add/patch/delete、columns.*、tables.* 全链路实测通过
外键关联与「链接记录摘要」外键列在下拉中显示被关联行的摘要而非裸 IDrecords.list 返回 linked_record_summaries: {"5": {"1": "骑兵部"}} 实测
Explorations 自定义查询保存可复用的查询定义(选列/改名/过滤/变换),随时运行explorations.add + explorations.run 实测跑通「薪资一览」查询
多数据库连接同时管理多个 PostgreSQL 服务器/数据库,支持连接「已有外部实例」同实例内配置了内部 warehouse + 外部 business(PG 16.15)两库,servers.configured.list 返回两个 server 实测
数据库内权限模型依赖 PostgreSQL 角色与权限(官网:"Postgres for Access Control"),RPC 提供 *.privileges.* 系列方法方法清单实测含 databases/schemas/tables.privileges.* 共 9 个权限方法
多用户与协作用户管理、协作者(collaborator)绑定数据库角色users.add(zhangsan)+ collaborators.add 实测通过
SSO 单点登录OIDC 与 GitHub(allauth 的 openid_connect、github provider),SSO_CONFIG_DICT 配置settings INSTALLED_APPS/SOCIALACCOUNT_PROVIDERS 源码实证
数据导入CSV/TSV 导入为表(data files + tables.import)路由 api/db/v0/data_files/ 与 RPC tables.get_import_preview/tables.import 实测存在
公开表单生成可匿名提交的数据收集表单(forms.*,支持发布/令牌)RPC 方法清单含 forms.add/set_publish_public/submit 等 11 个方法
匿名分析上报开关可选的匿名使用统计(analytics.get_state/initialize/disable)RPC 方法实测存在,上报地址指向 analytics.mathesar.dev(production settings 实证)
多语言界面英/西/法/日登录页 common-data JSON "supported_languages": {"en","es","fr","ja"} 实测
健康检查端点/healthz/ready/ 与 /healthz/live/curl http://localhost:8128/healthz/ready/ 返回 200 {"status": "ok"} 实测

版本亮点:0.12.0 的 SSO_CONFIG_DICT 为新的 SSO 配置入口,旧的 OIDC_CONFIG_DICT 保留为向后兼容别名(官方 compose 文件注释原文 "deprecated, use SSO_CONFIG_DICT",settings 源码中两者均可读取),这让 SSO 从「只会 OIDC」升级为「OIDC + GitHub 双 provider」。

五、快速开始(最小可用示例)

本节给一条不依赖图形界面的最小验证链:登录 → 确认数据库 → 读一张表。假定你已按部署指南把 Mathesar 跑在本机 8128 端口、并完成了首次安装向导(创建管理员 admin)。演示账号使用 admin / q1w2e3r4。

第一步,用 curl 带 CSRF 令牌登录,拿到会话 Cookie:

# 访问登录页取 CSRF 令牌(-c 把 Cookie 存到 cj.txt)
csrf=$(curl -s -c cj.txt http://localhost:8128/auth/login/ \
  | grep -oP 'name="csrfmiddlewaretoken" value="\K[^"]+' | head -1)
# 提交登录表单(302 跳转到 / 即成功)
curl -s -b cj.txt -c cj.txt -o /dev/null -w 'login: %{http_code}\n' \
  -X POST http://localhost:8128/auth/login/ \
  --data-urlencode "csrfmiddlewaretoken=$csrf" \
  --data-urlencode "username=admin" \
  --data-urlencode "password=q1w2e3r4" \
  -H "Referer: http://localhost:8128/auth/login/"

实测回显:

login: 302

第二步,调用 JSON-RPC 端点确认已配置的数据库(未登录直接调会得到认证错误,见下文第(注)说明):

# 批量调用:列数据库 + 读 employees 表前 2 行
curl -s -b cj.txt -X POST http://localhost:8128/api/rpc/v0/ \
  -H 'Content-Type: application/json' -d '[
  {"id":1,"jsonrpc":"2.0","method":"databases.configured.list","params":{}},
  {"id":2,"jsonrpc":"2.0","method":"records.list","params":{"database_id":1,"table_oid":17574,"limit":2}}
]'

实测回显(节选):

[{"id": 1, "jsonrpc": "2.0", "result": [{"id": 1, "name": "warehouse", "server_id": 1, "last_confirmed_sql_version": "0.12.0", "needs_upgrade_attention": false, "nickname": "仓储示例库"}]},
 {"id": 2, "jsonrpc": "2.0", "result": {"count": 2, "results": [{"1": 1, "2": "关羽", "3": 9500.75, "4": "2023-04-01 AD", "5": 1}, {"1": 2, "2": "张飞", "3": 8100, "4": "2023-07-15 AD", "5": null}], "linked_record_summaries": {"5": {"1": "骑兵部"}}}}]

(注)认证边界实测:不带 Cookie 直接 POST /api/rpc/v0/ 时,HTTP 状态码仍为 200,但返回体是 JSON-RPC 错误:

[{"id": 1, "jsonrpc": "2.0", "error": {"code": -32603, "message": "Authentication failed when calling \"databases.configured.list\""}}]

第三步,浏览器打开 http://localhost:8128/,未登录会被 302 重定向到 /auth/login/?next=/(实测重定向地址),登录后即进入库/表导航界面。到这里,最小验证链完成:说明 Mathesar 的 Web 入口、会话认证与数据面 API 全部可用。

六、适用场景与限制

典型场景(官网明确列出的五类 + 本文补充判断):

  1. 资产/库存管理(Asset or Inventory Management):给非技术同事一个录入、更新、检索资产的前端,权限仍由 PG 控制。
  2. 客服/工单数据维护(Customer Support):把工单表开放给运营团队增删改查。
  3. 可分享的数据看板(Shareable Data Dashboard):用 Explorations 固化查询,链接给需要的人。
  4. 拨款/资助跟踪(Grant Tracking and Management)、工时管理(Timesheet Management):官网列举的另外两类结构化记录管理场景。
  5. DBA 的「安全前端」:让业务部门直接操作 PG 库,但收走服务器 SSH 与 psql 权限——数据留在原地、权限沿用 PG 角色,这是 Mathesar 相对「导出 CSV 发来发去」或「自研管理后台」的核心价值。

明确限制(逐条有据):

  1. 只支持 PostgreSQL:官网定位原文即 "for Postgres databases";RPC 全部方法围绕 PG 的 OID/schema 体系设计,无法接 MySQL/SQLite。
  2. 0.x 版本阶段:最新 0.12.0(2026-07-02),官方尚未发布 1.0,升级时需关注 release notes;实例内每个库记录 last_confirmed_sql_version(实测 0.12.0)与 needs_upgrade_attention 标志,就是为 SQL 层升级追踪设计的。
  3. GPL-3.0 许可证:对「把 Mathesar 改造后嵌入自家闭源产品分发」的集成方有传染性约束(GPL-3.0 LICENSE 文件实证);纯自托管内部使用不受影响。
  4. 连接外部库需要网络可达:Mathesar 服务必须能直接连通目标 PG 的 host:port(本文实测中外部 PG 16.15 实例与 Mathesar 同网络部署才连通)。

七、同类选型对比

围绕「表格化数据管理 UI」这一品类,选取三个最常被对比的开源竞品。所有星数取自 shields.io 徽章服务(其数据源为 GitHub API)、版本号取自 shields.io /github/v/tag 徽章、许可证取自各仓库根 LICENSE 文件实抓,查询日期统一为 2026-10-30:

维度Mathesar 0.12.0NocoDBBaserowTeable
GitHub Stars5.2k65k6.2k22k
最新版本0.12.0(2026-07-02)v2026.10.1v2.4.1release.2026-10-30T09-29-42Z.3673(滚动 tag)
许可证GPL-3.0(单一许可证,无分区)自定义 LICENSE(文件头实测 "License — Updated on: January 29, 2026",shields.io 许可证探测无法识别为标准许可证)MIT Expat(核心),premium/、enterprise/ 目录单独许可主体 AGPL-3.0,packages/ 目录 MIT
数据存放模型直存 PG,数据即标准 PG 表抽象层(自建数据模型,支持多数据源外连)抽象层(Postgres 基座 + 自建模型)抽象层(Postgres 基座 + 自建模型)
技术栈Python/Django + Svelte 构建产物Node.jsPython/Django + VueNestJS + React
支持数据库仅 PostgreSQL多种(MySQL/PG/SQLite 等)主要 Postgres主要 Postgres
权限模型直接沿用 PG 角色/权限(无第二层权限体系)自建工作区/基表权限自建工作区权限自建空间权限
维护主体501(c)(3) 非营利基金会商业公司商业公司(Baserow B.V.)商业公司(Teable, Inc.)
版本节奏(近 9 个月)8 个 release,约 5~6 周一版日期式高频发版(如 2026.10.1)2.x 常规迭代滚动日期 tag

💡 技术拓展:上表「数据存放模型」一列是选型的第一分水岭。直存派(Mathesar)胜在数据零锁定、DBA 友好、权限天然复用 PG;抽象派(NocoDB/Baserow/Teable)胜在视图类型丰富(看板/甘特/表单视图等)、协作体验更接近 Airtable。若你的数据必须始终是「标准 PG 表、可随时用 psql 接管」,选 Mathesar;若你要的是「Airtable 平替」的多视图协作体验,抽象派更合适。

量化选型建议:

  • 社区规模上 NocoDB(65k)>> Teable(22k)> Baserow(6.2k)≈ Mathesar(5.2k),但 Mathesar 与 Baserow 处于同一量级,且 Mathesar 是四者中唯一「非商业公司维护 + 单一 GPL-3.0 + 数据零抽象」的组合。
  • 许可证敏感场景(如银行、政企内网再分发):Mathesar 的 GPL-3.0 边界最清晰(整仓一个许可证);Baserow/Teable 是「开源核心 + premium 目录」的 open-core 结构,NocoDB 使用自定义 LICENSE 文本,合规评估成本更高。
  • 已有 PG 运维体系的团队:Mathesar 不引入第二套权限与数据模型,DBA 用 pg_roles 即可管住所有入口;这是它与三个抽象派竞品最本质的差异。

八、参考链接