数据库能力差异
不同数据库在数据类型、存储过程、视图、事务和安全上下文方面存在差异。数据墙DBW 尽量提供一致的 API 表现,但部分能力受限于底层数据库。
SQL Server
会话上下文
启用 set-session-context 后,数据墙DBW 在每次查询前将 JWT 声明写入 SQL Server 的 SESSION_CONTEXT:
json
{
"data-source": {
"database-type": "mssql",
"options": { "set-session-context": true }
}
}注意事项:
- 仅 SQL Server 2016+ 支持。
- 启用后响应缓存被自动禁用。
- JWT 声明直接映射为
SESSION_CONTEXT键。
不支持的数据类型
| 数据类型 | 原因 |
|---|---|
geography | 地理空间类型,不支持序列化 |
geometry | 平面空间类型,不支持序列化 |
hierarchyid | 层次数据类型,不支持序列化 |
rowversion | 行版本类型,不包含在 API 响应中 |
sql_variant | 可变类型列,不支持类型推断 |
xml | XML 类型,不支持序列化 |
SQL Server 独有功能
| 功能 | 说明 |
|---|---|
| 存储过程实体 | 完整支持,包括参数配置 |
autoentities | 基于 T-SQL LIKE 模式的自动实体发现 |
| 聚合查询 | GraphQL aggregate 和 groupBy |
| 多重变更 | GraphQL 多重 create/update/delete |
| 会话上下文 | JWT 声明注入数据库会话 |
PostgreSQL
最低版本
需要 PostgreSQL 11 或更高版本。引擎使用 Npgsql 驱动连接。
不支持的数据类型
| 数据类型 | 说明 |
|---|---|
bytea | 二进制字符串,不支持序列化 |
date | 建议使用 timestamp 替代 |
time | 不带日期的时间类型 |
timestamptz | 带时区的时间戳,当前不支持 |
连接字符串参数名
PostgreSQL 的参数名使用空格分隔的 PascalCase(User ID、SSL Mode),与 SQL Server 和 MySQL 格式不同。
不支持的功能
| 功能 | 说明 |
|---|---|
| 存储过程 | 不支持暴露为实体 |
| 聚合查询 | GraphQL 聚合不可用 |
| 多重变更 | GraphQL 多重变更不可用 |
autoentities | 不支持 |
| 会话上下文 | 不支持 |
| GraphQL 多重创建 | 不支持 |
MySQL
最低版本
需要 MySQL 8 或更高版本。
不支持的数据类型
| 数据类型 | 说明 |
|---|---|
geometry | 空间类型,不支持序列化 |
json | 原生 JSON 类型,当前不支持映射 |
set | 枚举集合类型,不支持类型推断 |
time | 不带日期的时间类型 |
不支持的功能
| 功能 | 说明 |
|---|---|
| 视图实体 | 不支持暴露视图 |
| 存储过程 | 不支持暴露为实体 |
| 聚合查询 | GraphQL 聚合不可用 |
| 多重变更 | GraphQL 多重变更不可用 |
autoentities | 不支持 |
| 会话上下文 | 不支持 |
| GraphQL 多重创建 | 不支持 |
三数据库功能能力总览
| 能力 | MSSQL | PGSQL | MySQL |
|---|---|---|---|
| 表实体 | ✓ | ✓ | ✓ |
| 视图实体 | ✓ | ✓ | — |
| 存储过程实体 | ✓ | — | — |
| GraphQL 聚合 | ✓ | — | — |
| GraphQL 多重变更 | ✓ | — | — |
autoentities | ✓ | — | — |
| 会话上下文 | ✓ | — | — |
| MCP 自定义工具 | ✓ | — | — |
| 字段别名 | ✓ | ✓ | ✓ |
| 实体权限 | ✓ | ✓ | ✓ |
| 行级策略 | ✓ | ✓ | ✓ |
