该章节以及相关的 pl/pgsql 函数用于提供 Web Feature Service 规范所要求的长事务支持实现。
注意
要想使用该功能,用户必须使用 serializable transaction level 这样的数据库隔离级别,否则锁事务无法实现。
AddAuth — 添加一个用于当前事务的鉴权令牌(authorization token),如果成功返回 true
用法
boolean AddAuth(text auth_token);
描述
添加一个用于当前事务的鉴权令牌(authorization token),如果成功返回 true。
在临时表 temp_lock_have_table 中添加一个当前事务标识和鉴权令牌
样例
SELECT LockRow('towns', '353', 'priscilla');
BEGIN TRANSACTION;
SELECT AddAuth('joey');
UPDATE towns SET the_geom = ST_Translate(the_geom,2,2) WHERE gid = 353;
COMMIT;
---Error--
ERROR: UPDATE where "gid" = '353' requires authorization 'priscilla'
相关参考
LockRow
CheckAuth — 基于鉴权令牌(authorization token),在一个表上创建一个阻止或允许更新或删除表记录的触发器。
用法
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);
描述
基于鉴权令牌(authorization token),在一个表上创建一个阻止或允许更新或删除表记录的触发器。通过列的
注意
如果该表上面已经有了一个鉴权触发器,函数会返回错误。如果没有开启事务支持,函数会抛出异常。
样例
SELECT CheckAuth('public', 'towns', 'gid');
result
------
0
相关参考
EnableLongTransactions
DisableLongTransactions — 关闭长事务支持。该函数会移除对长事务支持所创建的元数据信息表(保存这些空间表的相关信息),并丢掉所有表上面的锁检测的触发器
用法
text DisableLongTransactions();
描述
关闭长事务支持。该函数会移除对长事务支持,并丢掉所有表上面的锁检测的触发器
具体就是该函数会删除元数据表 authorization_table 和视图 authorized_tables 以及触发器 checkauthtrigger
样例
SELECT DisableLongTransactions(); result Long transactions support disabled
相关参考
EnableLongTransactions
EnableLongTransactions — 开启长事务支持。该函数会创建开启事务支持所必须的元数据表。在使用本章节其他函数(本节的函数都需要事务支持)前需要调用该函数一次,当然再执行一次也没有什么问题。
用法
text EnableLongTransactions();
描述
开启长事务支持。该函数会创建开启事务支持所必须的元数据表。在使用本章节其他函数(本节的函数都需要事务支持)前需要调用该函数一次,当然再执行一次也没有什么问题。
具体就是该函数会创建元数据表 authorization_table 和视图 authorized_tables。
样例
SELECT EnableLongTransactions(); result Long transactions support enabled
相关参考
DisableLongTransactions
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);
描述
对于一个表中具体的行加锁或者说加认证。参数 expire 默认的过期时间是当前时间的一个小时之后过期。 如果成功返回 1,否则返回 0(表示已经加了锁)。
样例
SELECT LockRow('public', 'towns', '2', 'joey');
LockRow
-------
1
--Joey has already locked the record and Priscilla is out of luck
SELECT
LockRow('public', 'towns', '2', 'priscilla');
LockRow
-------
0
参考
UnlockRows
UnlockRows — 根据认证 token,移除所有记录的锁,返回被释放的记录数。
用法
integer UnlockRows(text auth_token);
描述
根据认证 token,移除所有记录的锁,返回被释放的记录数。
样例
SELECT LockRow('towns', '353', 'priscilla');
SELECT LockRow('towns','2', 'priscilla');
SELECT UnLockRows('priscilla');
UnLockRows
------------
2
相关参考
LockRow