已知限制
本文档汇总数据墙DBW 当前版本的已知功能限制和注意事项。
REST 限制
| 限制 | 说明 |
|---|---|
| 不支持关系查询 | REST 端点不支持嵌套关联数据,需多次请求 |
| 不支持聚合查询 | REST 无聚合能力 |
| 视图书需手动指定主键 | 视图实体必须配置 key-fields 或 fields[].primary-key,否则按主键查询返回空 |
| 视图不支持关系 | 视图实体不能配置 relationships |
| 存储过程不支持分页筛选排序 | $filter、$orderby、$first、$after 对存储过程无效 |
| 存储过程仅返回第一个结果集 | 多结果集的存储过程只返回第一个 |
| 自动生成主键的表不支持无键 PUT/PATCH | IDENTITY 列的表,通过 URL 指定主键做 PUT/PATCH 会返回 404(MySQL 不支持) |
| 请求体严格模式 | request-body-strict: true 时多余字段导致 400 |
GraphQL 限制
| 限制 | 说明 |
|---|---|
| 聚合仅 SQL Server | PostgreSQL 和 MySQL 不支持 GraphQL 聚合和分组 |
| 多重变更仅 SQL Server | PostgreSQL 和 MySQL 不支持 |
| 存储过程仅 SQL Server | PostgreSQL 和 MySQL 不支持 |
| 视图仅 SQL Server 和 PostgreSQL | MySQL 不支持视图实体 |
| 关系不支持跨配置文件 | 不同配置文件中定义的实体不能建立 relationships |
| 关系不支持视图和存储过程 | 只有表实体之间可以建立关系 |
| 多重变更不支持事务 | 按顺序执行但不回滚 |
| 多重变更需要 MARS | SQL Server 需 MultipleActiveResultSets=True |
after 游标不支持不同查询间复用 | 游标仅在相同查询参数下有效 |
depth-limit 未设置时无保护 | 恶意深层嵌套查询可能消耗过多资源 |
数据库限制
| 限制 | 说明 |
|---|---|
| 仅 SQL Server 支持存储过程 | PostgreSQL 和 MySQL 不支持存储过程实体 |
仅 SQL Server 支持 autoentities | 自动实体发现需要 T-SQL LIKE 语法 |
| 仅 SQL Server 支持会话上下文 | set-session-context 仅 MSSQL |
| MySQL 不支持视图 | 无法将 MySQL 视图暴露为 API |
| 视图不支持关系 | 所有数据库中视图实体均不可配置关系 |
| 视图需手动指定主键 | 引擎无法自动推断视图的主键 |
存储过程需 sys.dm_exec_describe_first_result_set | SQL Server 需要该函数的执行权限来获取返回结构 |
| 部分数据类型不支持 | geography、geometry、xml、bytea、json 等类型不序列化 |
安全限制
| 限制 | 说明 |
|---|---|
roles 声明名不可配置 | 引擎固定从 JWT 的 roles 声明提取角色 |
数据库策略不支持 create 和 execute | 策略仅适用于 read、update、delete |
| 策略引用的声明不存在时 403 | 而非返回空结果 |
Unauthenticated 模式下命名角色不生效 | 所有请求都是 anonymous |
| Simulator 仅 development 模式 | 生产模式下启动失败 |
| 不支持参数级授权 | 存储过程的所有参数对授权角色相同可见 |
| 不支持命名授权策略 | 不支持 ASP.NET / HotChocolate 风格的命名策略引用 |
MCP 限制
| 限制 | 说明 |
|---|---|
| 仅支持 DML 工具 | 不支持 DDL 操作(建表、改结构) |
| 不暴露原始 SQL | 代理不能执行任意 SQL 语句 |
aggregate_records 仅 SQL Server | PostgreSQL 和 MySQL 不支持 MCP 聚合工具 |
execute_entity 仅 SQL Server | 存储过程工具仅 SQL Server |
| 自定义工具仅存储过程 | mcp.custom-tool 只对存储过程实体有效 |
| 自定义工具名 snake_case | PascalCase 实体名自动转换为 snake_case 工具名 |
| Stdio 模式需 MCP 配置启用 | mcp.enabled 必须为 true |
inputSchema.properties 可能为空 | 代理应结合 describe_entities 使用 |
缓存限制
| 限制 | 说明 |
|---|---|
| 仅 REST 端点适用 | GraphQL 和 MCP 查询不使用缓存 |
| 写操作全量清空实体缓存 | 无法做到精确失效(只清除相关的缓存条目) |
| 会话上下文启用后缓存禁用 | set-session-context 自动禁用该数据源缓存 |
| L2 仅 Redis | 当前不支持其他分布式缓存提供程序 |
| 无缓存命中率统计 | 无内置端点查看缓存命中率和容量 |
配置限制
| 限制 | 说明 |
|---|---|
| 实体名全局唯一 | 多配置文件场景中不得重复 |
| 不支持跨文件关系 | 不同配置文件中的实体不能配置 relationships |
| 无全局查询超时 | 超时通过数据库连接字符串控制,无 runtime.query-timeout |
| 无内置速率限制 | 需在反向代理或网关层实现 |
init 命令会覆盖已有文件 | 不合并,不留备份 |
部署限制
| 限制 | 说明 |
|---|---|
| 无状态 | 重启后 L1 缓存丢失,L2 缓存可恢复 |
| 无内置数据迁移 | 不管理数据库 schema 变更 |
| 无内置用户管理 | 不提供用户注册、密码重置等功能——依赖外部身份提供程序 |
| 不自动刷新配置 | 修改 dab-config.json 后需重启服务(热重载仅限日志级别) |
