Skip to content

LOWCODE-DATASOURCE-DDL-DISABLED

错误编号:LOWCODE-DATASOURCE-DDL-DISABLED(文档登记。运行时仍是 BusinessExceptionmessageRespInfo 还没有 errorKey。)

适用版本 / 权益

免费。应用中心里保存表单、拖字段自动建表、页面设计自动托管对象时会碰到。

典型报错关键词

源码原文(三处同一句):

text
当前数据存储未允许自动建表,请在高级数据设置中开启自动建表

出现位置:

何时抛
BusinessApplicationFormDataService.resolveRuntimeDatasource保存应用表单、要新建托管对象时,没有任何合格数据源
BusinessApplicationPageDesignService.resolveRuntimeDatasource页面设计自动准备托管对象时,同上
BusinessObjectTableMappingService.syncManagedDatabase元数据已提交后做安全建表/加列,DDL 预览 executable=false(数据源不允许在线 DDL)

相近、不要混为一谈的文案:

message含义
表单包含需要调整已有字段的变化,需要在高级数据设置中确认数据库调整差异不是追加式 DDL,不能自动执行
表单存在多个历史数据存储,请在高级数据设置中处理同一表单挂了多个托管对象
运行数据源不允许在线DDLLowcodeDdlService.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
允许运行 DDLallow_runtime_ddl = 1是,默认是 0
非只读readonly != 1

源码过滤:

java
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.75allow_runtime_ddl 默认 0。所以新配的运行数据源即使能写,也默认不能自动建表。

界面 datasource.vue:字段标签是 「允许运行DDL」,不是「自动建表」。风险等级选 HIGH 或打开「只读模式」时,前端会把 allowRuntimeDdl 置 0。

配置位置

类型位置期望
ADMIN_MENU应用中心 → 应用数据源 /generator/datasourceallowRuntimeDdl(列表列名 DDL1
ADMIN_MENU同上allowRuntimeWrite1
ADMIN_MENU同上readonly0
ADMIN_MENU同上usageScope能作为 LOWCODE_RUNTIME 被选中
ADMIN_MENU同上isEnabled启用
ADMIN_MENU应用运行页 → 更多 → 高级数据设置看对象绑定的数据源 / 物理表确认绑的就是刚改的那条源

正确配置

  1. 打开 应用中心 → 应用数据源,编辑该应用用的运行数据源(不要改只读导入源)。
  2. 用途范围能覆盖低代码运行时。
  3. 只读模式 = 否,允许运行写入 = 是,允许运行DDL = 是
  4. 保存。
  5. 回到应用,再保存原来的表单/页面。不要新建一套半成品对象。

生产库打开运行时 DDL 等于允许应用在这个库执行受控的建表/加列。只应开在明确给低代码用的库,不要开在核心业务只读库。

解决步骤

  1. 看报错是不是完整原句。若是「需要确认数据库调整」或「多个历史数据存储」,走高级数据设置里的对象映射,不是只改 DDL 开关。
  2. 在数据源列表看 允许运行DDL 列。默认否。
  3. 打开后回到应用再保存一次。历史对象以数据源当前配置为准,不会被对象里旧的 allowDdl 快照挡住。
  4. 若对象只读或 allowDdl === false,高级数据设置里「确认同步数据库」按钮是禁用的,只能预览/导出脚本给 DBA。
  5. 仍然失败:确认数据源已启用、不是 HIGH 风险被前端清掉 DDL、库账号真有建表权限(那是另一类 JDBC 失败,文案会变成 数据表创建失败:...;已保留表单设计,可直接重试)。

验证方法

  1. 数据源详情里 allowRuntimeDdl = 1allowRuntimeWrite = 1readonly = 0
  2. 再保存原表单,不再弹出这句 message
  3. 目标库出现对应业务表,或只是补列。

仍未解决时提供的安全信息

  • 本页错误编号和完整 message
  • 数据源编码(不要贴 JDBC 密码)
  • usageScope / 是否默认源 / DDL 与只读三个开关的值
  • 是保存表单、保存页面,还是高级数据设置里点同步

相关文档