ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ToolJet Database 表操作实战指南:搜索、重命名、列管理与 Schema 导出的完整解析

ToolJet Database 表操作实战指南:搜索、重命名、列管理与 Schema 导出的完整解析 ToolJet Database 表操作实战指南搜索、重命名、列管理与 Schema 导出的完整解析【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet本篇基于 ToolJet 3.0.0-LTS 官方文档 Table Operations 编写系统讲解 ToolJet Database内部数据库中表级与列级操作的完整用法搜索表、重命名表、新增/编辑/删除列、导出 Schema 以及删除表的确认机制。文章同时深入 后端表操作服务 与 REST 控制器 的真实实现说明每项操作在双数据库事务下的底层行为、保护性校验与 PostgREST 同步机制帮助你既会用界面也能看懂其工程实现。一、ToolJet Database 表操作总览ToolJet Database 是内置于 ToolJet 工作区Workspace的关系型数据库。每个组织在 PostgreSQL 中拥有独立租户 Schema从源码结构看Schema 名为workspace_${organizationId}对应数据库角色为user_${organizationId}见 租户 Schema 初始化表元数据则记录在应用库的internal_tables表中。官方文档覆盖了以下七类表操作全部通过表列表行右侧的 kebab 菜单三个竖点或列头操作触发前端菜单项定义见 表项操作弹出菜单操作入口对应后端 ActionSearch Table搜索表工具栏 Search 按钮view_tables/view_tableRename Table重命名表kebab 菜单 → Edit tableedit_tableAdd New Column新增列kebab 菜单 → Add new column或列头行末的按钮add_columnExport Schema导出结构kebab 菜单 → Export前端本地导出Delete Table删除表kebab 菜单 → Deletedrop_tableEdit Column编辑列列名 kebab 菜单 → Edit columnedit_columnDelete Column删除列列名 kebab 菜单 → Deletedrop_column后端将上述操作统一注册在一个动作分发表中见 getActionHandler每个动作都有独立的 REST 端点全部挂载在tooljet-db控制器下见 控制器HTTP 方法与路径动作GET /organizations/:organizationId/tables列出表搜索的数据来源GET /organizations/:organizationId/table/:tableName查看单表结构列、外键、配置PATCH /organizations/:organizationId/table/:tableName重命名表/编辑表DELETE /organizations/:organizationId/table/:tableName删除表POST /organizations/:organizationId/table/:tableName/column新增列PATCH /organizations/:organizationId/table/:tableName/column编辑列DELETE /organizations/:organizationId/table/:tableName/column/:columnName删除列二、Search Table搜索表点击工具栏的Search按钮打开搜索框输入表名即可在当前组织的表列表中过滤出目标表。该列表数据来自view_tables动作后端按organizationId查询InternalTable实体仅返回id与tableName两个字段并按表名升序排序见 viewTables 实现。需要注意的是搜索范围严格限定在当前组织内跨工作区Organization不可见表中记录的是逻辑表名而物理 PostgreSQL 表名使用的是InternalTable.id二者通过元数据表映射。三、Rename Table重命名表操作步骤点击表名右侧的 kebab 菜单图标选择Edit table右侧滑出抽屉面板在面板中修改表名并保存。后端行为重命名走edit_table动作请求体中通过new_table_name字段携带新表名。服务端会先在同一组织内查询是否已存在同名表若冲突则抛出Table name already exists: name错误见 editTable 中重命名分支。整个操作在应用库与 ToolJet Database 两个连接上开启事务任一侧失败都会回滚保证元数据与物理结构一致。从源码结构看edit_table同时承担了列的增删改与重命名职责前端把“新旧列的对比清单”整体提交服务端据此批量执行dropColumns/addColumns/changeColumns因此仅重命名时提交空列变更即可。四、Add New Column新增列两种入口点击表名右侧 kebab 菜单 →Add new column点击列头行末的按钮。右侧抽屉中需要填写四个要素字段说明Column Name新列的唯一名称作为其键标识Data Type从受支持的数据类型中选择合适的类型详见下文Default Value可选。但当表已有数据行、且列应用了 NOT NULL 约束时默认值变为必填否则 PostgreSQL 无法为已有行回填Foreign Key Relation打开开关后弹出菜单选择外键引用的目标表与目标列支持的数据类型新增列时可选的数据类型及约束矩阵完整继承自 Data Types 文档Data Type说明示例serial生成整型序列常用作主键。新建表时自动创建id列serial 类型作为主键1, 2, 3, 4, 5…varchar不定长字符串任意字符串int无小数部分的整数-2147483648 ~ 2147483647bigint更大的整数-9223372036854775808 ~ 9223372036854775807float不精确的变精度数值3.14booleantrue / false / nulltruedate with timeISO 8601 日期时间底层按 UTC 存储展示时转换为指定时区2024-07-22 15:30:00jsonb存储 JSON 结构化数据数组、嵌套对象{name: John Doe, age: 30}各类型可应用的约束矩阵Primary Key / Foreign Key / Unique / Not NullData TypePrimary KeyForeign KeyUniqueNot Nullserial✅❌✅✅varchar✅✅✅✅int✅✅✅✅bigint✅✅✅✅float✅✅✅✅boolean❌❌❌✅date with time❌❌❌✅jsonb❌❌❌✅后端实现要点add_column动作见 addColumn 实现做了三件事元数据登记为新列生成一个 UUID写入InternalTable.configurations.columns.column_names映射列名 → UUID该映射用于前端展示与数据行的键名解析DDL 执行通过 TypeORM QueryRunner 调用addColumn在物理表上建列。其中字符串默认值会经 addQuotesIfString 自动补上单引号varchar 列的默认值在 PostgreSQL 中需要字面量引号外键校验与创建若勾选了 Foreign Key Relation先通过 fetchAndCheckIfValidForeignKeyTables 校验引用表是否存在于本组织若引用列属于复合主键则直接拒绝并抛出Foreign key cannot be created as the referenced column is in the composite primary key.。所有 DDL 成功后统一执行NOTIFY pgrst, reload schema通知 PostgREST 重新加载表结构保证应用内数据源立即可查新列。五、Export Schema导出表结构点击表名右侧三个竖点图标 →Export即可将该表的 Schema 下载为 JSON 文件。需要明确其边界只导出表结构定义列名、数据类型、约束等不包含表内数据也不包含表间关系外键引用在**导出整个应用App**时可以选择导出“带关联表 Schema”或“不带表 Schema”的版本该选项即基于本 JSON 结构拼装。前端入口位于 表项操作菜单的 Export schema 项点击后调用handleExportTable定义于 TableListItem 组件基于view_table接口返回的列与配置信息在浏览器侧生成并下载 JSON。从源码结构看view_table返回的configurations字段保存了列名到 UUID 的映射以及每列的展示配置见 viewTable 实现这正是导出 JSON 的元数据来源。六、Delete Table删除表含引用保护操作步骤点击表名右侧三个竖点 →Delete→ 在确认弹窗中再次点击Delete。关键保护机制删除走drop_table动作服务端在执行前会调用 findQueriesLinkedToTable 检查该表是否被任何应用查询引用——它查询data_queries表筛选数据源类型为tooljetdb且查询配置options中匹配该表 ID 的最新版本记录。若存在引用直接拒绝删除并返回Table cant be deleted, it is being used in app queries确认无引用后删除操作在应用库事务删除internal_tables记录与TJDB 事务物理DROP TABLE中成对执行任一失败整体回滚见 dropTable 实现事务结束后仍会NOTIFY pgrst, reload schema刷新 PostgREST 的表清单。实践建议删除表之前先清理或迁移引用该表的 Data Query否则删除会被后端直接拦截。七、Edit Column编辑列操作步骤点击列名上的 kebab 菜单 →Edit column。可修改内容包括列显示名、默认值与约束如 Not Null、Unique。重要限制编辑列时不能更改数据类型Data Type。后端edit_column动作见 editColumn 实现的执行顺序为更新InternalTable.configurations中的列配置与列名映射若请求携带foreign_key_id_to_delete先dropForeignKey移除旧外键约束通过changeColumn应用新约束与默认值若列名发生变化new_column_name追加执行renameColumn。同样的双事务 回滚 PostgREST 重载模式确保元数据与物理列结构始终一致。八、Delete Column删除列操作步骤点击列名 kebab 菜单 →Delete。限制条件若该列正作为**主键Primary Key**使用则无法删除——必须先移除该列的主键约束将主键职责转移到其他列才能删除该列。后端drop_column动作见 dropColumn 实现先从configurations中摘除该列的名称映射与配置再调用 QueryRunner 的dropColumn执行物理删除同样在双事务内完成并触发 PostgREST 结构重载。九、底层机制小结双库一致性与租户隔离综合源码可以看到ToolJet 的每张表操作都遵循同一套工程模式这也是理解所有表操作行为的钥匙元数据与物理结构双写应用库InternalTable记录逻辑表名、列名 → UUID 映射及每列配置ToolJet Database租户 Schemaworkspace_orgId下的物理表承载真实数据。所有写操作建表、改表、增删列都在两条连接上开事务失败即双回滚参考 createTable 事务结构PostgREST 感知每次结构变更后执行NOTIFY pgrst, reload schema让代理层的数据访问接口即时可见新结构命名安全字符串默认值自动补引号、jsonb 默认值经formatJSONB规整、serial 类型识别nextval(前缀见 prepareColumnListForCreateTable避免默认值写坏 DDL保护性校验删表检查应用查询引用、重命名检查同名冲突、外键检查引用表存在性与复合主键引用均在服务端强制生效绕过 UI 直接调 API 同样受保护。掌握了以上界面操作与底层机制你可以在 ToolJet Database 中安全地完成表结构的全生命周期管理从建表后的日常增删列、重命名到跨环境复用结构时的 Schema 导出再到确认无引用后的彻底删除每一步都有明确的后端校验作为兜底。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表