LOWCODE-DATASOURCE-DDL-DISABLED
错误编号:LOWCODE-DATASOURCE-DDL-DISABLED(文档登记。运行时仍是 BusinessException 的 message,RespInfo 还没有 errorKey。)
适用版本 / 权益
免费。应用中心里保存表单、拖字段自动建表、页面设计自动托管对象时会碰到。
典型报错关键词
源码原文(三处同一句):
当前数据存储未允许自动建表,请在高级数据设置中开启自动建表出现位置:
| 类 | 何时抛 |
|---|---|
BusinessApplicationFormDataService.resolveRuntimeDatasource | 保存应用表单、要新建托管对象时,没有任何合格数据源 |
BusinessApplicationPageDesignService.resolveRuntimeDatasource | 页面设计自动准备托管对象时,同上 |
BusinessObjectTableMappingService.syncManagedDatabase | 元数据已提交后做安全建表/加列,DDL 预览 executable=false(数据源不允许在线 DDL) |
相近、不要混为一谈的文案:
message | 含义 |
|---|---|
表单包含需要调整已有字段的变化,需要在高级数据设置中确认数据库调整 | 差异不是追加式 DDL,不能自动执行 |
表单存在多个历史数据存储,请在高级数据设置中处理 | 同一表单挂了多个托管对象 |
运行数据源不允许在线DDL | LowcodeDdlService.executeCreateTable 的直接拒绝 |
用户会看到什么
在应用里保存表单或页面,弹窗/RespInfo.message 就是上面那句。表单设计一般已经留下,打开开关后可以再保存一次补建表(in-app-lowcode-builder 的约定:元数据先提交,DDL 失败可原位重试)。
提示里的「高级数据设置」是应用运行页顶栏更多菜单里的抽屉标题。真正改开关的地方是 应用中心 → 应用数据源(路由 /generator/datasource)。列表上有 写入、DDL 两列;界面编辑字段名是「允许运行DDL」(allowRuntimeDdl)。

2026-08-26 演示站实拍。演示环境这条源的 DDL 已是「是」。若你本地仍报「未允许自动建表」,把对应源的 DDL 改成是后再保存原表单。
发生原因
自动托管只认已启用的 LOWCODE_RUNTIME 数据源,并且同时满足:
| 字段 | 表 gen_datasource | 必须 |
|---|---|---|
| 已启用 | is_enabled = 1 | 是,selectEnabledDatasources 的 WHERE |
| 用途含运行时 | usage_scope 能筛到 LOWCODE_RUNTIME | 是 |
| 允许运行写入 | allow_runtime_write = 1 | 是 |
| 允许运行 DDL | allow_runtime_ddl = 1 | 是,默认是 0 |
| 非只读 | readonly != 1 | 是 |
源码过滤:
Integer.valueOf(1).equals(datasource.getAllowRuntimeWrite())
&& Integer.valueOf(1).equals(datasource.getAllowRuntimeDdl())
&& !Integer.valueOf(1).equals(datasource.getReadonly())多个合格源时选:默认源优先(is_default = 1),再 sort,再 datasource_id。一个都没有就抛这句。
列默认值来自迁移 V1.0.75:allow_runtime_ddl 默认 0。所以新配的运行数据源即使能写,也默认不能自动建表。
界面 datasource.vue:字段标签是 「允许运行DDL」,不是「自动建表」。风险等级选 HIGH 或打开「只读模式」时,前端会把 allowRuntimeDdl 置 0。
配置位置
| 类型 | 位置 | 键 | 期望 |
|---|---|---|---|
| ADMIN_MENU | 应用中心 → 应用数据源 /generator/datasource | allowRuntimeDdl(列表列名 DDL) | 1 |
| ADMIN_MENU | 同上 | allowRuntimeWrite | 1 |
| ADMIN_MENU | 同上 | readonly | 0 |
| ADMIN_MENU | 同上 | usageScope | 能作为 LOWCODE_RUNTIME 被选中 |
| ADMIN_MENU | 同上 | isEnabled | 启用 |
| ADMIN_MENU | 应用运行页 → 更多 → 高级数据设置 | 看对象绑定的数据源 / 物理表 | 确认绑的就是刚改的那条源 |
正确配置
- 打开 应用中心 → 应用数据源,编辑该应用用的运行数据源(不要改只读导入源)。
- 用途范围能覆盖低代码运行时。
- 只读模式 = 否,允许运行写入 = 是,允许运行DDL = 是。
- 保存。
- 回到应用,再保存原来的表单/页面。不要新建一套半成品对象。
生产库打开运行时 DDL 等于允许应用在这个库执行受控的建表/加列。只应开在明确给低代码用的库,不要开在核心业务只读库。
解决步骤
- 看报错是不是完整原句。若是「需要确认数据库调整」或「多个历史数据存储」,走高级数据设置里的对象映射,不是只改 DDL 开关。
- 在数据源列表看
允许运行DDL列。默认否。 - 打开后回到应用再保存一次。历史对象以数据源当前配置为准,不会被对象里旧的
allowDdl快照挡住。 - 若对象只读或
allowDdl === false,高级数据设置里「确认同步数据库」按钮是禁用的,只能预览/导出脚本给 DBA。 - 仍然失败:确认数据源已启用、不是 HIGH 风险被前端清掉 DDL、库账号真有建表权限(那是另一类 JDBC 失败,文案会变成
数据表创建失败:...;已保留表单设计,可直接重试)。
验证方法
- 数据源详情里
allowRuntimeDdl = 1、allowRuntimeWrite = 1、readonly = 0。 - 再保存原表单,不再弹出这句
message。 - 目标库出现对应业务表,或只是补列。
仍未解决时提供的安全信息
- 本页错误编号和完整
message - 数据源编码(不要贴 JDBC 密码)
usageScope/ 是否默认源 / DDL 与只读三个开关的值- 是保存表单、保存页面,还是高级数据设置里点同步
