控制空间数据库中特征ID的生成¶
介绍¶
所有空间数据库数据存储(postgis、oracle、mysql等)通常从表主键中派生功能ID,并假定在需要生成新功能(wfs insert操作)时,如何定位键的下一个值的某些约定。
常见的约定依赖于查找自动增量列(postgis)或查找以特定约定命名的序列,例如 <table>_<column>_SEQUENCE
(甲骨文案例)。
如果找不到上述任何一个,通常存储会在每次新请求时返回到生成随机特征ID,使表不适合基于特征ID的搜索和事务。
元数据表说明¶
这些默认值可以通过创建 primary key metadata table 它指定要使用的列以及用于生成新主键值的策略。可以使用此SQL语句创建(模式限定的)表(此语句对PostGIS和Oracle有效,使其适应特定的数据库,如果需要,可以在末尾删除检查)::
--PostGIS DDL
CREATE TABLE my_schema.gt_pk_metadata (
table_schema VARCHAR(32) NOT NULL,
table_name VARCHAR(32) NOT NULL,
pk_column VARCHAR(32) NOT NULL,
pk_column_idx INTEGER,
pk_policy VARCHAR(32),
pk_sequence VARCHAR(64),
unique (table_schema, table_name, pk_column),
check (pk_policy in ('sequence', 'assigned', 'autogenerated'))
)
--ORACLE DDL
CREATE TABLE gt_pk_metadata (
table_schema VARCHAR2(32) NOT NULL,
table_name VARCHAR2(32) NOT NULL,
pk_column VARCHAR2(32) NOT NULL,
pk_column_idx NUMBER(38),
pk_policy VARCHAR2(32),
pk_sequence VARCHAR2(64),
constraint chk_pk_policy check (pk_policy in ('sequence', 'assigned', 'autogenerated')));
CREATE UNIQUE INDEX gt_pk_metadata_table_idx01 ON gt_pk_metadata (table_schema, table_name, pk_column);
可以为该表指定不同的名称。在这种情况下,必须在 primary key metadata table 存储的配置参数。
下表描述了元数据表中每一列的含义。
Column |
Description |
table_schema |
表所在的数据库架构的名称。 |
table_name |
要发布的表或视图的名称 |
pk_column |
用于形成要素ID的列的名称 |
pk_column_idx |
多列键中列的索引,否则为空。如果需要多列键,将使用具有相同表架构和表名的多个记录。 |
pk_policy |
新的价值生成策略,用于表中需要添加新功能的情况(遵循WFS-T插入操作)。 |
pk_sequence |
为pk_列生成新值时要使用的数据库序列的名称。 |
的可能值 pk_policy
是:
assigned .将使用新插入功能中的属性值(假定已启用“公开主键”标志)。
sequence . 属性的值将从
pk_sequence
列。autogenerated .该列为自动递增列,将使用自动递增中的下一个值。
将元数据表与视图一起使用¶
geoserver可以发布无问题的空间视图,但通常会产生两种副作用:
该视图被视为只读
功能ID是随机生成的
元数据表也可以引用视图,只需在 table_name
列:这将导致稳定的ID,并且在支持可更新视图的数据库中,它还将使代码将视图视为可写的(因此,允许对其使用WFS-T)。