ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ToolJet Database Editor:可视化建表、CSV 批量导入与数据过滤的完整实践指南

ToolJet Database Editor:可视化建表、CSV 批量导入与数据过滤的完整实践指南 ToolJet Database Editor可视化建表、CSV 批量导入与数据过滤的完整实践指南【免费下载链接】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/ToolJetToolJet Database 是 ToolJet 内置的托管式数据层Database Editor 则是直接管理它的可视化工作台。本篇基于仓库中的官方文档 Database Editor 与配套前后端源码完整讲清建表与列约束、行级编辑、CSV 批量上传的 Upsert 语义、过滤Filter与排序Sort的操作方法并延伸到服务端真实接口与查询构建链路帮助你在不写 SQL 的前提下把 ToolJet Database 当作生产可用的内部应用数据底座。Database Editor 总览ToolJet Database 将数据组织为表tables每张表可以有不同结构。打开 Database Editor 后所有表按字典序lexicographically列在左侧点击任一表即可查看其数据左侧边栏Sidebar可以收起为数据编辑区腾出更多空间。从源码结构看这一前端模块位于 TooljetDatabase 目录目录划分与界面功能一一对应目录对应功能TableList / TableListItem / Sidebar左侧表列表与可折叠侧边栏Table / Drawers / Forms数据表格、右侧抽屉式编辑面板与表单Filter / Sort / Search / Menu过滤、排序、搜索与表格菜单usePostgrestQueryBuilder.jsx把 Filter/Sort/分页条件拼装成 PostgREST 查询串与之配合的服务端接口集中在 tooljet-db 控制器例如GET /tooljet-db/organizations/:organizationId/tables列表、POST /tooljet-db/organizations/:organizationId/table建表带TableCountGuard与FeatureAbilityGuard双重守卫、POST .../bulk-uploadCSV 上传等。可见界面上的每个动作都有明确的 REST 端点支撑且全部经过组织级鉴权。创建新表Create New Table在 ToolJet Database 中创建新表的步骤点击 Database Editor 左上角的Create New Table按钮右侧会滑出一个抽屉drawer在其中填写新表的详情。创建一张新表需要输入Table name表名默认会自动创建一个id列数据类型为serial并作为表的主键primary key你可以把主键改成其他列支持复合主键。列定义选项Add Columns选项说明Column name为列输入一个唯一名称。Data type从下拉菜单中选择合适的数据类型。支持的类型详见 Supported Data Types 一节。Default value (optional)指定列的默认值。留空时该列允许为 null。Primary Key勾选后将该列设为主键可以同时勾选多列构成复合主键。详见 Primary Key。NULL/NOT NULL toggle控制列是否允许 null 值默认允许 null。Unique toggle点击 kebab 菜单打开Unique开关为该列添加唯一约束保证所有值互不相同默认允许重复。Foreign Key点击 Add Relation建立外键关系把本列链接到另一张表的主键或唯一约束列。详见 Foreign Key。前端提交后请求会命中服务端 createTable 端点最终委托TooljetDbTableOperationsService.perform(organizationId, create_table, ...)在对应组织的租户 schema 下执行建表。列约束Column ConstraintsToolJet Database 支持多种列约束用于维护数据完整性、对表中存储的数据强制规则Primary Key主键保证指定列组的值在全表所有行中唯一且非空作为每条记录的唯一标识。Foreign Key外键在两张表的数据之间建立链接保证引用完整性——要求源表外键列组的值必须匹配目标表主键或唯一约束列组中的值。Source Table源表要添加约束的当前表Target Table目标表包含被引用列的表。Unique唯一保证指定列组的值在全表中唯一但允许 null 值。Not Null非空保证指定列不允许 null 值每行都必须提供取值。各数据类型与约束的允许组合摘自 Permissible Constraints per Data Type 表数据类型Primary KeyForeign KeyUniqueNot Nullserial允许不允许允许允许varchar允许允许允许允许int允许允许允许允许bigint允许允许允许允许float允许允许允许允许boolean不允许不允许不允许允许date with time不允许不允许不允许允许jsonb不允许不允许不允许允许从这张表可以看出只有 varchar/int/bigint/float 这类“值类型”可以承担主键、外键与唯一约束boolean、时间戳、jsonb 只能使用 Not Null 约束这也是建表设计外键时必须牢记的边界。添加与修改数据Adding and Modifying Data添加数据入口Add New Data数据编辑区顶部的Add new data按钮提供两种写入方式新增单行Add new row与批量上传Bulk upload data。新增一行Add New Row点击顶部的Add new data按钮并选择Add new row或者点击表格左下角的按钮。右侧会打开一个抽屉在其中填写新行的各列值。编辑整行Edit Row将鼠标悬停在要编辑的行上该行复选框旁会出现展开expand图标点击该图标打开抽屉即可编辑整行数据。编辑单个单元格Edit a Cell双击要编辑的单元格输入新值点击Save按钮或按Enter保存修改布尔类型列使用开关toggle切换取值。批量上传 CSVBulk Upload Data点击数据编辑器顶部的Bulk upload data按钮右侧滑出抽屉后即可上传一个CSV文件向表中插入记录。其写入语义是Upsert若某行缺少 id 列数据则按行数据插入一条新记录若id 已存在则用行数据更新对应记录。抽屉中还可以下载模板 CSV 文件既可以按模板填写待上传数据也可以把自有 CSV 整理成与模板相同的格式。文件就绪后通过文件选择器选中文件或拖拽进选择器再点击Upload data完成上传。要求RequirementsCSV 各列的数据类型必须与 ToolJet Database 表中的列类型匹配serial类型的id列不能包含重复值必须满足所有列约束例如标记为Unique的列在 CSV 中不得出现重复值。限制Limitations单个 CSV 文件最多 1000 行CSV 文件大小上限为 5 MB服务端默认值文档“Limitations”条目中写作 2 MB与源码默认值不一致以源码为准。在自托管版本中可通过以下环境变量突破上述限制TOOLJET_DB_BULK_UPLOAD_MAX_ROWS最大上传行数默认 1000 行TOOLJET_DB_BULK_UPLOAD_MAX_CSV_FILE_SIZE_MB批量上传的最大 CSV 文件大小MB默认 5 MB。源码视角批量上传的真实执行链路前端把 CSV 以 multipart 形式提交到POST /tooljet-db/organizations/:organizationId/table/:tableName/bulk-upload。控制器先做文件体积校验// server/src/modules/tooljet-db/controller.ts this.MAX_CSV_FILE_SIZE process.env?.TOOLJET_DB_BULK_UPLOAD_MAX_CSV_FILE_SIZE_MB !isNaN(Number(process.env.TOOLJET_DB_BULK_UPLOAD_MAX_CSV_FILE_SIZE_MB)) ? 1024 * 1024 * Number(process.env.TOOLJET_DB_BULK_UPLOAD_MAX_CSV_FILE_SIZE_MB) : 1024 * 1024 * 5; // 5MB超过上限直接抛出File size cannot be greater than ...MB的 400 错误。校验通过后进入 TooljetDbBulkUploadService核心逻辑与文档描述完全吻合行数上限在构造函数中读取TOOLJET_DB_BULK_UPLOAD_MAX_ROWS非法值回落到 1000流式解析时一旦超过即抛出Row count cannot be greater than ...使用fast-csv流式解析并开启strictColumnHandling校验表头必须是表列名的子集Columns ... not found in table逐行做类型转换校验boolean 只接受true/falseinteger/double precision/bigint 按各自规则解析jsonb 执行JSON.parse用集合检测 CSV 内部的主键重复命中即报Duplicate primary key found on row[n]全部校验通过后在单条事务中执行批量 INSERT ... ON CONFLICT (主键) DO UPDATE SET ...并对serial列默认值形如nextval(...)写入DEFAULT让数据库自动取号——这正是文档所说“id 缺失则插入、id 存在则更新”Upsert 语义的实现。删除记录Delete Records删除一条或多条记录勾选目标记录左侧的复选框选中任意一条后顶部会出现删除按钮点击Delete record即可删除所选记录。过滤数据Filter添加过滤器Add Filter点击数据编辑器顶部的Filter按钮即可为表添加任意多个过滤器。每个过滤器由三部分组成从 Columns 下拉中选择一个column列选择一个operation操作符为该操作符输入一个value值。可用操作符Available operations操作符说明equals判断列值是否等于输入值。greater than判断列值是否大于输入值。greater than or equal判断列值是否大于或等于输入值。less than判断列值是否小于输入值。less than or equal判断列值是否小于或等于输入值。not equal判断列值是否不等于输入值。like模糊匹配大小写敏感。例ToolJet不会匹配tooljet。ilike模糊匹配大小写不敏感。例ToolJet会匹配tooljet。match正则匹配大小写敏感。例^ToolJet$匹配ToolJet但不匹配ToolJet Inc。imatch正则匹配大小写不敏感。例^ToolJet$匹配ToolJet但不匹配ToolJet Inc。in判断列值是否在输入的值列表中。例(1,2,3)。is判断列值是否等于输入值用于 boolean 类型。清空过滤器Clear Filter既可以逐个删除过滤器也可以一键清空全部过滤器。源码视角Filter 条件如何变成查询前端 Filter 组件 维护“列 操作符 值”三要素齐全的过滤器集合并通过 usePostgrestQueryBuilder 把它们编译进查询串// frontend/src/TooljetDatabase/usePostgrestQueryBuilder.jsx const { column, operator, value } filters[key]; if (!isEmpty(column) !isEmpty(operator) !isEmpty(value)) { postgrestQueryBuilder.current.filterQuery.filter(column, operator, value); }filter/sort/pagination三段查询参数最终拼接成一条请求经tooljetDatabaseService.findOne(...)发送而服务端 tooljet-db 控制器中的All(/proxy/*)代理端点 把请求转发给组织专属的 PostgREST 实例——也就是说like/ilike/match/imatch等操作符直接对应 PostgREST 的过滤语法content-range响应头则被用来提取总行数做分页。此外每次增删改后前端会带着当前的 filter 与 sort 状态重新拉取数据handleRefetchQuery保证编辑界面与过滤视图一致。排序数据Sort点击顶部的Sort按钮从下拉菜单中选择一个column再选择ascending升序或descending降序即可对表数据排序。从实现看排序同样由 usePostgrestQueryBuilder 中的sortQuery.order(column, order)生成 PostgREST 的order参数与过滤条件、分页limit/offset重置时默认limit50, offset0合并为同一条查询因此排序、过滤与分页可以任意叠加且互不覆盖。小结Database Editor 把 ToolJet Database 的日常操作收敛到四件事建表含四类列约束、行级读写新增/整行编辑/单元格编辑/删除、CSV 批量 Upsert1000 行、5 MB 默认上限可经TOOLJET_DB_BULK_UPLOAD_MAX_ROWS与TOOLJET_DB_BULK_UPLOAD_MAX_CSV_FILE_SIZE_MB调整以及过滤/排序查询。所有操作都有对应的服务端端点与校验逻辑控制器、批量上传服务配合 Data Types、Primary Key 与 Foreign Key 文档可以构成一套完整的、可审计的可视化管理闭环。【免费下载链接】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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进