长事务支持函数

AddAuth

AddAuth — 添加一个用于当前事务的鉴权令牌(authorization token),如果成功返回true。

语法

addauth ::=

参数

auth_token

text类型。

返回值

返回值为boolean类型。

在temp_lock_have_table的临时表中创建/添加当前事务标识符和授权令牌密钥。

示例

--AddAuth — 添加一个用于当前事务的鉴权令牌(authorization token),如果成功返回true
BEGIN TRANSACTION;

SELECT AddAuth('joey');
ADDAUTH(boolean)      |
----------------------
true                  |
总数目:1
UPDATE geom_table SET geom_type = ST_Translate(geom_type,2,2) WHERE id = 1; 
COMMIT;

CheckAuth

CheckAuth — 基于鉴权令牌(authorization token),在一个表上创建一个阻止或允许更新或删除表记录的触发器。

语法

checkauth ::=

参数

a_schema_name

text类型。

a_table_name

text类型。

a_key_column_name

text类型。

返回值

返回值为integer类型。

基于鉴权令牌(authorization token),在一个表上创建一个阻止或允许更新或删除表记录的触发器。通过列的<rowid_col>方式来标识行。如果没有指定schema,使用当前current_schema()对应的值

注解

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

示例

select EnableLongTransactions();
ENABLELONGTRANSACTIONS(text)      |
----------------------------------
Long transactions support enabled |
总数目:1

select CheckAuth('sysdba', 'geom_table', 'id');
CHECKAUTH(int)      |
--------------------
0                   |
总数目:1
select CheckAuth('sysdb', 'geom_table', 'id');
ERROR, namespace "SYSDB" not found

DisableLongTransactions

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

语法

disablelongtransactions ::=

参数

返回值

返回值为text类型。

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

示例

drop table geom_table;

select DisableLongTransactions();
DISABLELONGTRANSACTIONS(text)      |
-----------------------------------
Long transactions support disabled |
总数目:1

EnableLongTransactions

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

语法

enablelongtransactions ::=

参数

返回值

返回值为text类型。

该函数会创建元数据表authorization_table 和视图authorized_tables。

示例

SELECT EnableLongTransactions();
ENABLELONGTRANSACTIONS(text)      |
----------------------------------
Long transactions support enabled |
总数目:1

LockRow

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

语法

lockrow ::=

参数

a_schema_name

text类型。

a_table_name

text类型。

a_row_key

text类型。

an_auth_token

text类型。

expire_dt

timestamp类型。参数expire默认的过期时间是当前时间的一个小时之后过期 。

返回值

返回值为integer类型。如果成功返回1,否则返回0(表示已经加了锁)

为表中的特定行设置锁定/授权 <authid>是一个文本值。

示例

CREATE TABLE SYSDBA.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );

SELECT LockRow('SYSDBA','MYSPATIAL_TABLE','2','joey');
LOCKROW(int)      |
------------------
1                 |
总数目:1
drop table myspatial_table;

CREATE TABLE SYSDBA.myspatial_table_2(gid serial, geom geometry);
INSERT INTO myspatial_table_2(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );

SELECT LockRow('SYSDBA','MYSPATIAL_TABLE_2','2','joey','2021-02-01'::timestamp);
LOCKROW(int)      |
------------------
1                 |
总数目:1
drop table myspatial_table_2;

UnlockRows

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

语法

unlockrows ::=

参数

auth_token

text类型。

返回值

返回值为integer类型。

移除指定授权id持有的所有锁。返回释放的锁数。

示例

SELECT UnLockRows('joey');
UNLOCKROWS(int)      |
---------------------
2                    |
总数目:1