一、支持长事务函数
这个模块和相关的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;