资讯动态

Mathesar 表管理实战指南:PostgreSQL 数据表的创建、维护与表级权限控制

发布时间:2026/10/13 12:23:33 来源:尧图企业网站定制
数据库后端前端协作【免费下载链接】mathesarAn intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access control.项目地址https://gitcode.com/gh_mirrors/ma/mathesar点击查看免费下载本文以 Mathesar 官方用户指南《Tables》为核心系统讲解在 Mathesar 中如何理解、创建、重命名、删除数据库表如何为表添加 PostgreSQL 存储的描述信息以及如何通过「Table Permissions」界面管理表的 Owner 与七种表级授权权限。读者将掌握从界面操作到 RPC 调用链、再到底层msarSQL 函数的完整表管理知识并了解访问控制对表操作的约束边界。什么是表Table所有关系型数据库——包括 PostgreSQL——都以「表」table也常被称为 relation为基本载体来组织数据。一张表由行rows、列columns和单元格cells构成。如果把一个数据库比作一个包含多个工作表sheets的电子表格文件那么一个数据库通常会包含若干张表甚至几十张表。与大多数电子表格不同数据库中的表之间通常是高度互联的。在数据库中relationships关系 提供了一种稳健的机制让一个单元格可以引用另一张表中的某一行记录。通过合理利用关系我们可以用多张相互链接的表来建模复杂的数据结构——这正是关系数据库的核心理念数据规范化normalization。补充Mathesar 的表结构信息以 PostgreSQL 的oid为唯一标识符。在 RPC 层 中TableInfo数据结构同时携带oid、name、schema所属 schema 的 oid、description、owner_oid、current_role_priv当前角色在表上拥有的权限列表、current_role_owns当前角色是否为表的所有者以及对象类型table/view/materialized_view。管理表增、删、改名与描述Mathesar 允许你在**数据库页面database page**中直接完成表的增、删、改名操作还能为表添加描述信息。这些描述会被写入 PostgreSQL 的COMMENT语句中存储详见 PostgreSQL COMMENT 文档因此任何通过其他工具连接数据库的人都能看到这些注释。需要注意你能否修改表取决于 access control访问控制 的约束——例如只有表的 Owner 才能重命名表、修改表描述见下文「表权限」一节。创建表在数据库页面中Mathesar 提供「新建表」入口对应前端 CreateTableForm.svelte 表单可填写表名name必填且不能与当前 schema 中已有表重名前端会做唯一性校验重名时提示「table name already exists」描述description可选最终写入 PostgreSQL COMMENT主键列primary key column默认列名为id、类型为IDENTITY可通过折叠面板自定义列名与列类型。后端层面创建表的请求最终走tables.addRPC 方法见 mathesar/rpc/tables/base.py其核心参数包括参数含义schema_oid新表所在 schema 的 OIDtable_name新表名称pkey_column_info新表主键列的描述名称与类型column_data_list按顺序创建的其他列描述constraint_data_list需要一并创建的约束描述owner_oid新表的所有者角色 OID为空则当前角色即为 Ownercomment新表的 COMMENT 描述该方法内部调用 db/tables.py 的create_table_on_database最终执行msar.add_mathesar_table数据库函数完成建表并把新表的主键列attnum记录到 Mathesar 的元数据中mathesar_added_pkey_attnum见 tables/metadata.py。重命名表与编辑描述进入表页面后在右侧**表检查器table inspector**的「Table」标签页中可以编辑表名与描述对应前端 TableName.svelte 与TableDescription。这些操作会调用tables.patchRPCmathesar/rpc/tables/base.py其SettableTableInfo支持以下字段name新表名传null视为不修改description表描述传null会清空描述columns列变更列表。底层由db.tables.alter_table_on_database调用msar.alter_table函数执行。删除表删除操作同样位于表检查器或数据库页面的表卡片上。删除前 Mathesar 会弹出确认对话框见 TableActions.svelte 中的handleDeleteTable与 TableCard.svelte确认后调用tables.deleteRPCmathesar/rpc/tables/base.py。# 删除一个表cascade 控制是否级联删除依赖对象 delete(*, table_oid: int, database_id: int, cascade: bool False) - str底层调用msar.drop_table见 db/tables.py返回被删除表的完整限定名。当表被其他对象如视图、外键约束依赖时cascadeTrue会一并删除依赖对象请谨慎使用。表权限Table PermissionsPostgreSQL 的权限模型分为「所有权ownership」与「授予的权限granted privileges」两层。Mathesar 完整尊重这套模型并提供了可视化的权限管理界面。Owner表的所有者在 PostgreSQL 中每张表都有一个角色被设定为其 所有者owner。只有 Owner 可以执行以下操作删除Drop表修改Alter表的列管理表级权限转移所有权transfer ownership注意即使通过权限授予某些操作依然只对 Owner 开放无法授权给其他角色。例如「给表新增列」这一操作没有对应的可授权权限——正如 roles.md 中所强调的非 Owner 角色无法通过任何授权方式获得「改表结构」的能力。Granted Privileges可授予的七种表级权限除所有权外以下权限可以被授予给特定角色来自 tables.md 原文 与 db/sql/05_msar.sql 中msar.list_table_privileges的实现权限作用SELECT允许读取表中的数据INSERT允许在表中创建新记录UPDATE允许更新表中已有记录DELETE允许删除表中的记录TRUNCATE允许一次性清空表中所有记录REFERENCES允许创建引用reference该表的外键约束TRIGGER允许在表上创建触发器这一权限集合与 RPC 层 TableInfo 中current_role_priv字段的类型定义一一对应也与前端 TablePermissionsModal.svelte 中allPrivileges配置完全一致。在 PostgreSQL 中上述权限的官方说明可参见 PostgreSQL 文档 DDL Privileges。表权限的界面操作要管理某张表的 Owner 与授予权限进入表页面table page点击右上角的Table Permissions按钮即可。该按钮位于表检查器的「Table」标签页内见 TableMode.svelte由权限弹窗 TablePermissionsModal.svelte 承载支持三类操作权限总览PermissionsOverview以「读read/ 写write」两级访问模式快速配置角色权限。其中read级别 仅SELECTwrite级别 SELECT INSERT UPDATE DELETE默认访问级别为read也可按需勾选TRUNCATE、REFERENCES、TRIGGER等更细粒度的权限。转移所有权TransferOwnership把表的 Owner 切换为其他角色。帮助与文档弹窗内内置「Table Permissions」文档链接与权限说明。保存权限时会调用tables.privileges.replace_for_rolesRPCmathesar/rpc/tables/privileges.py。该方法的语义是全量替换传入的direct列表中包含的权限会被GRANT未包含的权限会被REVOKE仅影响被传入的角色。底层通过 db/roles.py 调用msar.replace_table_privileges_for_rolesSQL 函数执行实际的授权/回收。转移所有权的 RPC 为tables.privileges.transfer_ownershipmathesar/rpc/tables/privileges.py。源码注释明确指出成功转移需满足三个前提当前用户是表的超级用户或 Owner当前角色是目标新 Owner 角色的MEMBER即能SET ROLE到新 Owner当前角色在表所在 schema 上拥有CREATE权限。底层实现msar权限函数从源码结构看表级权限能力由数据库层的msarschema 提供这些函数由 Mathesar 首次连接数据库时自动安装见 schemas.mdmsar.list_table_privileges(tab_id regclass)返回表中所有直接授予的、非默认的表权限格式为[{role_oid: int, direct: [str]}, ...]。其实现直接查询pg_catalog.pg_class的relacl并用aclexplode展开 ACL同时排除pg_%系统角色db/sql/05_msar.sqlmsar.list_table_privileges_for_current_role(tab_id)用于返回当前角色的权限列表供界面判断用户能否读写数据db/sql/05_msar.sqlmsar.replace_table_privileges_for_roles批量 GRANT/REVOKE 表权限msar.transfer_table_ownership转移表所有权。对应的 RPC 与 SQL 函数均有完整的测试覆盖可参考 mathesar/tests/rpc/test_table_privileges.py验证list_direct、replace_for_roles、transfer_ownership三个 RPC 方法的参数传递以及 db/sql/test_sql_functions.sql验证msar.list_table_privileges返回的权限集合与角色 OID。权限如何影响表操作理解表权限后再回头看「管理表」一节中的操作就能明白其背后的限制创建/删除/重命名表、修改列结构本质是结构变更通常要求当前角色是表 Owner或在 schema 上拥有CREATE权限增删改查数据分别对应INSERT、DELETE、UPDATE、SELECT权限——这也是 Mathesar 表页面的「Actions」区如 TableActions.svelte 中的导入、导出、数据探索等入口能够显示或禁用的依据关系外键约束的创建依赖REFERENCES权限同时 Mathesar 在创建引用列时会自动在 PostgreSQL 中建立外键约束详见 relationships.md。此外Mathesar 的元数据metadata如表描述、列顺序、记录摘要模板等见 tables/metadata.py与数据探索explorations目前对数据库的所有协作者均可读写不受 PostgreSQL 角色权限或用户 admin 状态限制——若你需要对此类元数据做访问限制可在 access-control.md 中了解当前模型后到项目 issue 中反馈使用场景。小结与延伸阅读本文覆盖了 Mathesar 中表的三大主题表的本质行、列、单元格与关系建模表的生命周期管理创建含主键列配置、重命名、编辑描述存储为 PostgreSQL COMMENT、删除支持级联表权限体系Owner 专属操作清单、七种可授予权限SELECT/INSERT/UPDATE/DELETE/TRUNCATE/REFERENCES/TRIGGER以及通过「Table Permissions」弹窗进行权限总览、批量授权与所有权转移的完整操作路径并下沉到 RPC 与msarSQL 层验证其实现。如需深入推荐继续阅读仓库中的相关文档与源码关系Relationships外键约束、引用列、记录摘要与记录选择器PostgreSQL 角色Roles角色所有权、继承与共享所有权的完整模型访问控制Access ControlMathesar 用户、PostgreSQL 角色、Stored Roles 与协作者的关系RPC 表接口 与 表权限 RPC表管理全部 RPC 方法的参数与语义msar 权限 SQLlist_table_privileges等函数的权威实现表权限前端实现权限弹窗的读/写访问级别配置。赞分享数据库后端前端协作【免费下载链接】mathesarAn intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access control.项目地址https://gitcode.com/gh_mirrors/ma/mathesar点击查看免费下载相关推荐PostgreSQL分区表管理pgAdmin4创建与维护指南PostgreSQL分区表管理pgAdmin4创建与维护指南 你是否还在为PostgreSQL大数据量表的性能问题发愁分区表Partition Table数据库客户端后端前端桌面应用Apache Pinot表管理终极指南如何创建、配置和维护数据表Apache Pinot表管理终极指南如何创建、配置和维护数据表 Apache Pinot作为开源的分布式分析引擎在处理PB级别数据时提供了卓越的实时查询能数据库OLAP大数据实时分析c3.js权限控制图表数据的访问权限管理c3.js权限控制图表数据的访问权限管理 你是否曾担心敏感数据通过图表泄露在数据可视化场景中不同用户角色应访问不同数据范围。本文将结合c3.js图表库通数据可视化上一篇Trigger.dev CLI 完全指南创建、本地运行与云端部署 v3 后台任务下一篇CC自动注册插件终极指南如何用cc-register快速简化组件开发流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑