示例:使用 sdetable 命令在 PostgreSQL 中创建空间视图
可按以下方法来创建空间视图:使用 sdetable 命令并在通过 –c 选项指定的列所组成的列表中包括空间列。使用 sdetable 命令创建空间视图时,视图将注册为 ArcSDE 中的表。要将视图注册为图层,请使用 sdelayer 命令。
本示例使用 sdetable 命令创建将要素类和非空间表中的列整合到一起的空间视图,并授予其权限。然后将视图作为图层注册到 ArcSDE 中。
创建空间视图
在以下示例中,表 employees 与要素类 regions 连接在一起。两张表基于各自的 emp_id 连接在一起。
sdetable –o create_view -T emp_region_view -t employees,hbear.regions –c "employees.emp_id,employees.name,hbear.regions.reg_id,hbear.regions.rname,hbear.regions.region" -a "eid,employee,rid,region,area" –w "employees.emp_id = hbear.regions.emp_id" -s mypgdbserver -i sde:postgresql:mypgdbserver -D testdb –u gdb –p gdb.bdg
如果表的所有者不是连接的用户,则名称必须为 owner.table 格式。使用多个表时,您必须通过 table.column 或 owner.table.column 格式来用表名称限定 –c 后面列出的每个列的名称。创建视图的用户必须至少同时拥有对表和要素类的 select 权限。
在本示例中,由于视图中的列来自两张不同的表,这使得表名特别长,因此,使用 –a 选项为各列指定别名。但是,只有在视图中的列名不明确时,才需要分配别名。例如,如果在两张表之间创建一个视图并包括二者的名称列,则应为列指定别名,以便区分名称。如果使用 –a 选项为列名分配别名,则在 –c 和 –a 列表中,列及其排列顺序必须相同。
reg_id 是来自 regions 要素类的非空整型列,用作 ArcSDE 中的行 ID。Region 是来自 regions 要素类的空间列。
gdb 用户必须至少具有 regions 要素类的 select 权限,才能将其包含到 emp_region_view 定义中。
现在,该视图已作为表注册到 ArcSDE 中(sde_table_registry 系统表中包含该视图对应的条目)。通过 ArcGIS Desktop 查看该视图时,它将显示为表。
授予视图权限
可使用 SQL 或 sdetable 命令授予视图权限。
在示例:使用 SQL 在 PostgreSQL 中创建空间视图并对其进行注册中,使用 SQL 授予视图权限。在本示例中,使用 sdetable 命令的 grant 操作。
sdetable -o grant -t emp_region_view -U dispatch1 -A SELECT -s mypgdbserver -i sde:postgresql:mypgdbserver -D testdb -u gdb -p gdb.bdg -I
通过包含 –I 选项,用户 dispatch1 便可将视图权限授予其他用户。
将视图注册为图层
使用 sdetable 命令创建视图时,该视图已作为表注册到 ArcSDE 中。要以图层形式查看视图,必须使用 sdelayer 命令对其进行注册。
sdelayer -o register -l emp_region_view,area -e a -C rid,USER -t ST_GEOMETRY -E 2.20,2.20,3.01,3.01 -R 1 -s mypgdbserver -i sde:postgresql:mypgdbserver -D testdb -u gdb -p gdb.bdg
为除 –o 外的选项所提供的值将视数据而定。
有关 sdelayer 和 sdetable 命令的详细信息,请参阅《管理命令参考》。