在 PostgreSQL 中使用 SQL 编辑非版本化的地理数据库 (geodatabase) 数据
如果数据不参与地理数据库行为,则可在地理数据库中使用 SQL 更新数据、将数据插入非版本化表或从其中删除数据。有关无法使用 SQL 编辑的数据类型和地理数据库行为类型的详细信息,请参阅可使用 SQL 编辑何种数据类型?。
已注册到地理数据库的所有数据都具有由系统维护的唯一非空对象 ID(行 ID)列。在地理数据库中使用 SQL 将记录插入非版本化表时,必须为对象 ID 提供唯一的值。
要获取此信息,请查询 sde_table_registry ArcSDE 系统表以获取要插入记录的表的注册 ID。拥有注册 ID 之后,可标识与该表对应的 i 表,因为 i 表与其业务表通过注册 ID 相关联。i 表存储在拥有对应表的用户的方案中。
在 INSERT 语句中调用 i<registration_id>_get_ids 函数,生成所插入记录的下一个对象 ID。
步骤:
-
从 SQL 编辑器(例如 psql)登录到数据库。
请确保以拥有数据编辑权限的用户身份登录到数据库。
-
查询 sde_table_registry 表,确定要插入记录的业务表的注册 ID。
SELECT registration_id FROM sde.sde_table_registry WHERE table_name = 'outbreak' and owner = 'hmoot'; registration_id 49
hmoot.outbreak 表的注册 ID 为 49。
-
使用函数 i49_get_ids(2,1) 从 i49 表中选择一个 id。此操作嵌套在 INSERT 语句中,如下例所示:
在此例中,site_id 列为对象 ID。
INSERT INTO hmoot.outbreak (site_id,med_code,num_affected,shape) VALUES ((SELECT o_base_id FROM hmoot.i49_get_ids(2,1)), 'v-22a', 3, ST_Point('point (12 36))', 12);
O_base_id 是要返回的对象 ID。函数中的 2 为常量,用于指示希望获得对象 ID 值。请勿在此位置使用任何其他值。1 指示希望从 i49 表中返回一个对象 ID。由于正在更新的只是一条记录,所以仅需要一个对象 ID。
相关主题
7/10/2012