金仓数据库 KingbaseGIS 使用手册(6.21. 长事务支持)

6.21. 长事务支持

该章节以及相关的 pl/pgsql 函数用于提供 Web Feature Service 规范所要求的长事务支持实现。

注意

要想使用该功能,用户必须使用 serializable transaction level 这样的数据库隔离级别,否则锁事务无法实现。

6.21.1. AddAuth

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

6.21.2. CheckAuth

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),在一个表上创建一个阻止或允许更新或删除表记录的触发器。通过列的 <rowid_col> 方式来标识行。如果没有指定 schema,使用当前 current_schema () 对应的值。

注意

如果该表上面已经有了一个鉴权触发器,函数会返回错误。如果没有开启事务支持,函数会抛出异常。

样例

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

result
------
0

相关参考

EnableLongTransactions

6.21.3. DisableLongTransactions

DisableLongTransactions — 关闭长事务支持。该函数会移除对长事务支持所创建的元数据信息表(保存这些空间表的相关信息),并丢掉所有表上面的锁检测的触发器

用法

text DisableLongTransactions();

描述

关闭长事务支持。该函数会移除对长事务支持,并丢掉所有表上面的锁检测的触发器

具体就是该函数会删除元数据表 authorization_table 和视图 authorized_tables 以及触发器 checkauthtrigger

样例

SELECT DisableLongTransactions();

result

Long transactions support disabled

相关参考

EnableLongTransactions

6.21.4. EnableLongTransactions

EnableLongTransactions — 开启长事务支持。该函数会创建开启事务支持所必须的元数据表。在使用本章节其他函数(本节的函数都需要事务支持)前需要调用该函数一次,当然再执行一次也没有什么问题。

用法

text EnableLongTransactions();

描述

开启长事务支持。该函数会创建开启事务支持所必须的元数据表。在使用本章节其他函数(本节的函数都需要事务支持)前需要调用该函数一次,当然再执行一次也没有什么问题。

具体就是该函数会创建元数据表 authorization_table 和视图 authorized_tables。

样例

SELECT EnableLongTransactions();

result

Long transactions support enabled

相关参考

DisableLongTransactions

6.21.5. LockRow

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

6.21.6. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值