功能说明
在PostGIS、KingBase等数据库中,Schema(模式)是一种重要的数据库对象组织方式,用于对数据库对象(如表、视图、函数)进行逻辑分组,从而实现多用户环境下的权限分离和数据管理。
SuperMap iDesktopX 2025 Update1 版本开始,在数据源连接信息中增加了 Schema 参数,以满足以下多种使用场景:
- 安全合规部署:数据源(超图sm系统表)与PostGIS扩展可分离存储,避免在公共Schema(如public)中创建用户表,满足企业严格的安全要求。
- 多平台数据隔离:允许超图数据源创建并管理多个独立Schema下的数据,实现多平台共享数据库时使用Schema保证操作隔离与权限控制。
- 迁移与分级存储:允许将数据直接写入指定的Schema中,实现数据的逻辑分级管理,在数据迁移中,可保留原始库的组织结构。
适用的数据库型数据源:PostGIS、POLARDBGanos、KingBase、HighGoDB、SHENTONG、Vastbase。
打开数据源设置Schema
设置说明
支持在打开数据源时指定 Schema :
- 若指定 Schema,则新增数据集(创建数据集、导入数据集、复制数据集)将存储在指定的 Schema。
- 若未指定,则默认使用数据源所在的 Schema。
权限说明
数据源打开后,将显示用户具有读取或编辑权限的所有 Schema 下的数据集。数据集的实际权限取决于连接用户对相应 Schema 及数据的读写权限,与打开数据源时指定的 Schema 无关。详细权限管理请参见数据集权限管理。
名称显示规则
- 数据源别名格式为:服务器地址_数据库名称_Schema名称。
- 数据集名称显示为 schema.datasetname 的形式命名(例如:region.sichuan)。连接符号可在 SuperMap.xml 中通过 SchemaJoin 设置为下划线(如 region_sichuan),具体设置请参考引擎相关设置。
注意事项:若输入的 Schema 不存在或名称错误,数据源仍可正常打开,系统不会在打开时校验 Schema 名称。但在执行写入操作(如创建数据集、导入数据集)时会提示失败。
Schema 参数区分大小写,在打开或新建数据源时,填写的 Schema 名称需与数据库中实际的 Schema 名称大小写完全一致。
新建数据源设置Schema
设置说明
支持在新建数据源时指定 Schema。您只需在数据源连接信息中设置 Schema 参数,创建数据源时,系统将自动完成 PostGIS 扩展与 Schema 的检查及创建,并确定数据源的存储位置。
权限要求
使用本功能创建数据源前,请确认连接用户的权限:
- 基础权限:对目标 Schema 具有 CREATE、USAGE 权限。
- CREATE SCHEMA 权限(即对数据库具有 CREATE 权限):当目标 Schema 未预先创建、需要系统自动创建时必备。
- CREATE EXTENSION 权限:当数据库中未创建 PostGIS 扩展、需要系统自动创建时必备,通常要求连接用户为超级用户或数据库所有者。
您可以在数据库端通过以下 SQL,确认 PostGIS 扩展所在的 Schema、当前用户对 Schema 的操作权限。
//查询PostGIS扩展所在的Schema
SELECT n.nspname AS schema_name, e.extname AS extension_name
FROM pg_extension e
JOIN pg_namespace n ON e.extnamespace = n.oid
WHERE e.extname = 'postgis';
结果说明:
若返回记录(如 Public),则扩展安装在此Schema下。
若无返回,表示未安装PostGIS扩展。
//查询当前用户对Schema的操作权限
SELECT
nspname AS schema_name,
has_schema_privilege('用户名', nspname, 'CREATE') AS can_create,
has_schema_privilege('用户名', nspname, 'USAGE') AS can_use
FROM pg_namespace
WHERE nspname != 'schema名';
结果说明:
返回记录中[V]表示此操作有权限,[ ]表示此操作无权限。
数据源创建位置规则
创建数据源时,系统按以下规则自动确定数据源的存储 Schema:
- 数据库中已创建 PostGIS 扩展:此时连接信息中指定的 Schema 不生效,数据源位置仅取决于当前用户的权限。
- 当前用户对扩展所在的 Schema 具有 CREATE 权限,则数据源创建在该 Schema 下,与扩展存储在一起,以兼容旧版本。
- 当前用户对扩展所在的 Schema 仅具有 USAGE 权限,则数据源创建在 SDX Schema 下,与扩展分离存储。分离存储时数据源仅支持创建在 SDX Schema 下,不支持指定其他 Schema。
- 数据库中未创建 PostGIS 扩展:
- 已指定 Schema,则 PostGIS 扩展与数据源将一同创建在指定的 Schema 下。
- 未指定 Schema,则数据源创建在 Public Schema 下。
上下版本兼容说明
| 功能 | 老版本使用新版本创建的数据源 | 新版本使用老版本 | |
| / | PostGIS扩展和数据源不在一个Schema(且数据源的Schema的名称为sdx) | PostGIS扩展和系统数据源在一个Schema | PostGIS扩展和系统数据源在一个Schema |
| 数据源打开 | 采用原始PostGIS数据源直连打开,没有读取系统表,识别不了栅格、网络、模型数据集。 | 正常使用 | 无兼容性问题 |
| 数据集创建、删除等依赖系统表的功能 | 无法正常使用 | 正常使用 | 无兼容性问题 |
| 数据编辑 | 采用原始PostGIS数据源打开编辑,比如CAD编辑过后系统表未更新,新版本打开四至范围、记录数维护有问题。系统表数据一致性会遭到破坏。 | 正常使用 | 无兼容性问题 |
| 数据源创建 | 识别已有sdx数据源不会再去创建 | 正常使用 | 无兼容性问题 |
| PostgreSQL打开PostGIS 数据源 | 可以打开,数据集无法显示。 | 正常使用 | 无兼容性问题 |
相关主题