在 PostgreSQL 中使用多版本化视图和 SQL 编辑版本化数据
可通过编辑基于数据创建的多版本化视图来编辑地理数据库中的版本化数据。
有若干个随 ArcSDE 安装的函数,用于帮助处理多版本化视图。这些函数及其描述如下:
功能 |
目的 |
语法和描述 |
---|---|---|
sde.sde_create_version |
创建新的地理数据库版本。 请始终编辑您自己的单独版本;使用多版本化视图时,多个编辑器无法编辑同一个版本。 |
SELECT sde.sde_create_version ('<parent_name>', '<version_name>', <rule_code>, <access_code>, '<description>') <parent_version> 是版本创建时所基于的版本。 <child_version> 是正在创建的版本的名称。 <name_rule> 指示针对版本指定的名称是否应视为是给定的 (2),或者在指定了重复名称时是否应创建唯一名称 (1)。 <access> 是版本的访问权限等级;0 表示“私有”,1 表示“公有”,2 表示“受保护的”。 <description> 是子版本的文本描述。 |
sde.sde_set_current_version |
设置将访问的地理数据库版本。 |
SELECT sde.sde_set_current_version('<version_name>'); <version_name> 是要连接到的地理数据库版本的名称。 |
sde.sde_edit_version |
启动和结束编辑会话。 |
SELECT sde.sde_edit_version('<version_name>',<1 or 2>) 指定 1 启动编辑会话。指定 2 结束编辑会话。 |
sde.sde_delete_version |
删除地理数据库版本。 |
SELECT sde.sde_delete_version('<version_name>'); |
通过多版本化视图编辑版本化表时,增量表也会随之变化,并且会自动生成新记录的行 ID(对象 ID)值。不过,与在 ArcGIS 编辑会话中编辑版本化数据不同,不会对这些编辑进行内部版本协调。
此外,在多版本化视图中启动编辑会话时,将在版本所引用的状态中放置排它锁。因此,强烈建议不要将多版本化视图用于编辑 DEFAULT 版本或者任何可能由其他用户的同步编辑或协调的版本,因为多版本化视图不会检测冲突,同时,放置的排它锁还会阻止其他用户的编辑。应该专门为多版本化视图编辑会话创建自有版本。
- 必须使用 ArcGIS 软件来执行版本管理操作,例如协调、解决冲突和提交。不适当的版本管理在处理视图时可导致地理数据库损坏。
- 切勿使用数据库管理系统 (DBMS) 工具来更新数据库中由 ArcSDE 维护的任何行 ID(对象 ID)字段。这些对象 ID 字段由地理数据库进行分配和管理,因此不应使用 SQL 进行更改。
- 切勿使用 SQL 编辑地理数据库的 DEFAULT 版本。对一个版本启动编辑会话会对此版本所引用的状态设置排它锁。如果锁定 DEFAULT 版本,将阻止 ArcGIS 用户连接到地理数据库。
下列步骤指导您创建多版本化视图、创建用于执行编辑的版本、设置要编辑的版本、启动编辑会话、利用多版本化视图执行某些编辑、停止编辑会话、提交编辑到数据库以及删除针对编辑创建的版本。在这些示例中,为对表执行编辑而创建的多版本化视图是 code_mv,为编辑而创建和使用的版本是 mvedits。
请记住,通过多版本化视图编辑的数据集必须已注册为版本。
-
在 MS-DOS (Windows) 或 shell (Linux) 命令提示符处,执行 sdetable 工具以创建多版本化视图。
sdetable –o create_mv_view –T code_mv –t code_enf –i sde:postgresql:myserver –D code –u sarja –p not4U
-
从 psql 登录到数据库,然后创建用于执行编辑的新版本。
SELECT sde.sde_create_version ('sde.DEFAULT', 'mvedits', 2, 1, 'version for edits');
-
将编辑会话的版本设置为刚刚创建的子版本。
SELECT sde.sde_set_current_version('mvedits');
-
通过执行 sde_edit_version 函数并指定 1 来启动编辑会话。
1 表示应启动编辑会话。
SELECT sde.sde_edit_version('mvedits',1);
-
使用 SQL 对多版本化视图执行第一次编辑。
在此例中,对现有记录进行了更新。
UPDATE code_mv SET propowner = 'C. Industry' WHERE vid = 2233
-
完成对该会话的所有编辑之后,通过执行 sde_edit_version 函数并指定 2 来停止编辑会话。
2 表示应关闭编辑会话。
SELECT sde.sde_edit_version('mvedits',2);
-
完成所有编辑操作后,通过 ArcGIS Desktop 协调和提交编辑,然后删除在步骤 2 中创建的地理数据库版本。如果决定放弃所做的更改,则不必协调和提交编辑,直接删除在步骤 2 中创建的版本即可。
SELECT sde.sde_delete_version('mvedits');
用单引号括起的文本是从字面上读的。因此,在引号标记中输入的文本必须与文本存储在数据库中的大小写情况相匹配(全大写、全小写或大小写混合)。