PostGIS之路——支持长事务函数和特例函数

一、支持长事务函数

        这个模块和相关的pl / pgsql功能已经被实现来支持长事务锁定的通过Web对象服务特例。

 1、AddAuth

       添加一个授权用于当前事务。创建/增加一个称为 temp_lock_have_table的临时表用来锁定当前事务标识符和授权。

boolean AddAuth(text auth_token);

示例SQL:

SELECT LockRow('myspatial_table', '353', 'priscilla');
BEGIN TRANSACTION;
SELECT AddAuth('joey');
UPDATE myspatial_table SET geom = ST_Translate(geom,2,2) WHERE gid = 353;
COMMIT;

2、CheckAuth

      检查对行的update和delete操作是否已授权。注意:如果一个授权触发已经存在在这个函数将错误;如果不启用事务支持,函数抛出一个异常。

integer CheckAuth(text a_schema_name, text a_table_name, text a_key_column_name);
integer CheckAuth(text a_table_name, text a_key_column_name);

示例SQL:

SELECT CheckAuth('public', 'myspatial_table', 'gid');

3、DisableLongTransactions

       关闭长事务支持。该函数删除长事务支持元数据表,。

text DisableLongTransactions();

示例SQL:

SELECT DisableLongTransactions();

4、EnableLongTransactions

      启动长事务支持。该函数创建长事务支持元数据表,在使用其他该节函数时需要被执行。执行2次无所谓。

text EnableLongTransactions();

示例SQL:

SELECT EnableLongTransactions();

5、LockRow

     锁定行。

integer LockRow(text a_schema_name, text a_table_name, text a_row_key, text an_auth_token, timestamp expire_dt);
integer LockRow(text a_table_name, text a_row_key, text an_auth_token, timestamp expire_dt);
integer LockRow(text a_table_name, text a_row_key, text an_auth_token);

示例SQL:
SELECT LockRow('public', 'myspatial_table', '2', 'joey');

6、UnlockRows

     解锁行。

integer UnlockRows(text auth_token);

示例SQL:

SELECT UnLockRows('myspatial_table');

二、特例函数

      这些函数很少用到,除非您的数据是在被破坏。使用这些函数是用于排除故障和修复,在正常情况下,这不会用到。

 1、PostGIS_AddBBox

     给一个几何对象添加范围边框。使用这个函数构建边框范围会很迅速,但是会增加几何对象的大小。注意一般情况是边界框会自动添加,除非你生成的边界框损坏或你有一个旧的安装,然后你需要放弃旧的。

     geometry PostGIS_AddBBox(geometry geomA);

     示例SQL:

 UPDATE myspatial_table
SET geom = PostGIS_AddBBox(geom)
WHERE PostGIS_HasBBox(geom) = false;

  2、PostGIS_DropBBox

       删除几何对象缓存的边界框。这将减小几何尺寸,构建他将影响查询速度。他也用于去掉损坏的缓存边界框。如果相交或查询几何关系超出了图形将返回true。

     geometry PostGIS_DropBBox(geometry geomA);

示例SQL:

       SET the_geom = PostGIS_DropBBox(the_geom)
WHERE Not (Box2D(ST_AsBinary(the_geom)) = Box2D(the_geom));

 3、PostGIS_HasBBox

       几何对象的边界框被返回将返回true,其他返回false。

boolean PostGIS_HasBBox(geometry geomA);

示例SQL:

SELECT the_geom
FROM sometable WHERE PostGIS_HasBBox(the_geom) = false;

 

 

posted @ 2013-03-21 01:01  清灵阁主  阅读(521)  评论(0编辑  收藏  举报