• 金仓数据库 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),在一个表上创建一个阻止或允许更新或删除表记录的触发器。通过列的 方式来标识行。如果没有指定 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

  • 相关阅读:
    Chrome扩展的核心:manifest 文件(下)
    题目0056-员工出勤
    Oracle缓存表
    深入了解CAS(Compare and Swap):Java并发编程的核心
    【微信小程序】创建项目
    YouTube深度学习视频推荐系统
    SpringMVC基础:MVC概念和环境配置
    网络安全大厂面试题汇总
    前端项目代码学习笔记
    2001-2021年省、上市公司五年规划产业政策整理代码+匹配结果
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126303497