在 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。

步骤:
  1. 从 SQL 编辑器(例如 psql)登录到数据库。

    请确保以拥有数据编辑权限的用户身份登录到数据库。

  2. 查询 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。

  3. 使用函数 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