当从 ArcGIS 客户端或通过 ArcGIS Server Web 服务连接到企业级地理数据库时,您将与您或其他数据库用户已添加到地理数据库中的数据集进行交互。为了追踪该数据和实施地理数据库行为,企业级地理数据库将使用系统表。
不得使用 ArcGIS 软件或 SDK 以外的任何其他软件更改系统表及其内容。但是,您可以使用 SQL 来查看系统表的内容。
核心系统表
核心地理数据库系统表可以强制实施地理数据库行为、存储有关地理数据库的信息以及追踪存储在地理数据库中的用户数据。
当您查询包含企业级地理数据库的 PostgreSQL 数据库时,您将看到 sde 方案中的以下核心系统表:
- GDB_CONFLICTS
- gdb_itemrelationships
- gdb_itemrelationshiptypes
- gdb_items
- gdb_itemtypes
- GDB_LOCKS
- gdb_replicalog
- gdb_tables_last_modified
- sde_archives
- SDE_branch_tables_modified
- SDE_branches
- sde_column_registry
- sde_compress_log - 于首次压缩地理数据库时创建。
- sde_coordinate_systems
- sde_dbtune
- sde_geometry_columns
- sde_layer_locks
- sde_layers
- sde_lineages_modified
- SDE_multibranch_table
- sde_mvtables_modified
- sde_object_ids
- sde_object_locks
- sde_process_information
- sde_raster_columns
- sde_server_config
- sde_spatial_references,存储在公共方案而非 sde 方案中。
- sde_state_lineages
- sde_state_locks
- sde_states
- sde_table_locks
- sde_table_registry
- sde_tables_modified
- sde_version
- sde_versions
以下表格存在于地理数据库中,但不再使用。未来的版本中可能会将其移除。
- sde_locators
- sde_metadata
- sde_layer_stats
- sde_logfile_pool
- sde_xml_columns
- sde_xml_index_tags
- sde_xml_indexes
用于实现企业级地理数据库功能的表
某些地理数据库功能的信息仅存储在核心系统表中。例如,以下功能的信息将存储在核心系统表中,且当您针对用户数据定义或启用此功能时,不会在数据库中创建其他表:
- 属性域 - 存储在 gdb_items 系统表中。gdb_itemtypes 系统表中的字段将对象标识为属性域。
- 地理数据库复本 - 在 gdb_items、gdb_itemrelationships、gdb_itemtypes 和 gdb_replicalog 系统表的数据库中进行追踪。
- 关系类 - 存储在 gdb_items 和 gdb_itemrelationships 系统表中。
但是,以下部分中描述的地理数据库功能会在您启用或使用该功能时创建其他内部表。
地理数据库存档
可使用地理数据库存档追踪数据的历史事务时间。事务时间表示在数据库中添加、删除或更新要素的时刻。
当启用地理数据库存档功能后,系统将创建一个存档类。存档类为业务表的副本,其中包含业务表中的所有字段,另外还包括三个新字段:gdb_from_date、gdb_to_date 和 gdb_archive_oid。在参与传统版本的表或要素类上启用存档功能时,系统还会向 sde_archives 系统表添加一条记录。该条记录中存储了为进行存档而被启用的表的注册 ID 及该表相关联的存档类表的注册 ID。
存档类表的名称是原业务表名称后加一条下划线和 H。例如,如果启用名为 buildings 的要素类的存档功能,则系统会创建一个存档类 buildings_H。此存档类表将存储在与业务表相同的方案中。
传统版本
当注册要素类或表以参与传统版本时,系统将创建两个表以追踪对数据的编辑:添加表和删除表。总之,它们被称为增量表。
添加表 (a_<registration_id>) 中包含了有关版本化业务表中各个插入或更新的记录(要素)的信息,并且可以查询该表来确定特定地理数据库状态时添加或修改的记录。
删除表 (d_<registration_id>) 中包含了与版本化表中已删除或已更新的行有关的信息,并且可通过查询识别特定状态下已删除或已修改的行。删除行时,不会以物理方式移除记录;它被标记为已删除并且不会再返回到后续数据库查询结果中。
添加表和删除表名称中的 registration_id 是 sde_table_registry 系统表中版本化表的值。
这些表是在与注册为版本化的表或要素类相同的用户方案中创建的。
除了增量表之外,追踪版本化表和编辑内容的核心系统表包括:sde_states、sde_state_lineages、sde_mvtables_modified 和 sde_versions 表。
密钥集表
ArcGIS 客户端可使用密钥集表来提高查询性能。在以下情况下密钥集表将存储一组所选的行:ArcGIS 客户端执行使用整型、数值型、日期型或字符串型属性来连接表的地理数据库关系查询。此类表可保存使用对象 ID 字段以外的属性的连接。
只有在执行以下任一操作时,地理数据库中才会出现密钥集表:
- 如果要素类涉及关系类,则从 ArcGIS Pro 或 ArcMap 中地图的要素类中选择 99 条以上的记录。
- 在 ArcGIS Pro 或 ArcMap 中,打开关系类中所涉及的要素类的属性表,并检索相关表。
- 在 ArcMap 中启动编辑会话。
每个会话每个连接会创建一个密钥集表作为全局临时表。因为该密钥集表是临时表,所以在用户与地理数据库断开连接时会被删除。但您可能会发现,由 PostgreSQL 创建的用来存储该表的临时方案将被保留。它们具有如 pg_temp_3 的名称。
密钥集表名称的格式如下所示:
keyset_<process_id>,其中 <process_id> 是触发密钥集表创建操作的会话的进程标识号。
日志文件表
ArcGIS 客户端使用日志文件表通过存储所选行的列表来提高查询性能。日志文件表使用基于对象 ID 属性的连接。
PostgreSQL 中的地理数据库在内存中使用临时表,因此它们不存储在数据库中。这些表是按用户创建的,并以 pg_temp<#>.sde_logfiles 命名。