返回首页

gbase数据、南大通用产品文档:GBase8sifx_lo_open() 函数

更新日期:2024年09月11日

ifx_lo_open() 函数打开现有的智能大对象来访问。

语法

mint ifx_lo_open(LO_ptr, flags, error)
ifx_lo_t *LO_ptr;
mint flags;
mint *error;
LO_ptr
指向标识要打开的智能大对象的 LO-pointer 结构的指针。
flags
指定 LO_ptr 标识的智能大对象以何种方式打开的 mint。
error
指向包含 ifx_lo_open() 设置的错误代码的 mint 的指针。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 782 -

用法
对于它需要访问的每一智能大对象的实例,您的 GBase 8s ESQL/C 程序必须调用
ifx_lo_open() 函数。

在 ifx_lo_open() 成功地完成之后,flags 参数的值指示智能大对象的模
式。要了解 flags 参数的有效值的描述,请参阅 表 1。

GBase 8s 使用 ifx_lo_open()(或 ifx_lo_create())建立的缺省参数,
来确定后续的操作是否导致对于智能大对象的锁定或记录日志。

每一 ifx_lo_open() 调用都隐式地与当前连接相关联。当此连接关闭时,数据库服务
器释放任何列都不引用的任何智能大对象(其引用计数为零的那些)。

如果 ifx_lo_open() 函数成功,则它返回有效的 LO 文件描述符(LO_fd)。然后,您
可使用该文件描述符来标识在后续的函数调用中访问哪个智能大对象,诸如 ifx_lo_read()
和 ifx_lo_write()。LO_fd 仅在当前数据库连接之内有效。

在 ifx_lo_open() 已打开了智能大对象之后,它将放回的 LO 文件描述符中的搜寻位
置设置为字节 0。如果为了锁定整个智能大对象而设置锁定的缺省范围,则 ifx_lo_open()
函数还可取得智能大对象上的锁,基于访问模式的下列设置:
对于 dirty-read 模式,数据库服务器不在智能大对象上放置锁。
对于 read-only 模式,数据库服务器在智能大对象上取得共享锁。
对于 write-only、write-append 或 read-write 模式,数据库服务器在智能大对象上取
得更新锁。
当发生对 ifx_lo_write() 或 ifx_lo_writewithseek() 函数的调用时,
数据库服务器
将该锁提升为排他锁。

当当前事务终止时,
ifx_lo_open() 取得的锁丢失。
然而,
当需要锁的下一函数执行时,
数据库服务器在此取得该锁。如果不需要此行为,请使用 BEGIN WORK 事务块,并在需
要使用该锁的最后一条语句之后放置 COMMIT WORK 或 ROLLBACK WORK 语句。

返回代码
-1
函数不成功;请检测该错误的详尽错误代码。
有效的 LO 文件描述符

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 783 -
函数已成功地打开了智能大对象,并返回了有效的 LO 文件描述符。

在内部,
GIN 索引包含一个在键上构造的B-tree 索引,
每个键是一个或多个被索引项的
一个元素(比如,一个数组的一个成员)。并且页面上每个元组包含了堆指针的B-tree 的一
个指针(一个posting tree),当列表小到足以和键值一起存储到一个索引元组中时,则是堆
指针的一个简单列表(一个posting list)。
多列GIN 索引通过在组合值(列号、键值)上建立一个单个的B-tree 实现。不同列的
键值可以有不同的类型。
GIN 快速更新技术

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1282
由于倒排索引的本身特性影响,更新一个GIN 索引可能会比较慢。插入或更新一个堆
行可能导致许多往索引的插入。
当对表执行VACUUM 后,
或者如果待处理实体的列表太大
了(大于work_mem),这些实体被使用和初始索引创建时用到的相同的bulk 插入方法,
移动到主要的GIN 数据结构。即使把额外的VACUUM 开销算进去,这也大大提升了GIN
索引更新的速度。而且,这种额外开销的工作可以通过后台进程而不是前端查询来处理。
这种方法的主要缺点在于搜索时除了常规的索引还必须要扫描待处理实体的列表。因
此,大的待处理实体的列表会显著的拖慢搜索。另一个缺点是,虽然大多数更新很快,但是
一个导致待处理列表(pending list)变得“太大”的更新将引发一个立即清理,并因此比起
其它更新会非常慢。恰当的使用autovacuum 可以弱化这两个问题。
如果一致的响应时间(清理实体速度和更新速度的响应时间)比更新速度更重要,
可以
通过把GIN 索引的存储参数FASTUPDATE 设置为off 而不使用待处理实体。详细请参考
CREATE INDEX。
部分匹配算法
GIN 可以支持“部分匹配”查询。即:查询并不决定单个或多个键的一个精确的匹配,
而是,
可能的匹配落在一个合理的狭窄键值范围内
(根据compare 支持函数决定的键值排序
顺序)。此时,extractQuery 方法并不返回一个用于精确匹配的键值,取而代之的是,返回
一个要被搜索的键值范围的下边界,并且设置pmatch 为true。然后,使用comparePartial 方
式扫描这个键值范围。
comparePartial 必须为一个相匹配的索引键返回0,
如果不匹配但依然
在被搜索范围内时返回小于0 的值,对超过可以匹配的范围的索引键则返回大于0 的值。

会话变量
通过本功能您可以查看会话变量信息,如下图所示:

GBaseDataStudio 管理工具手册
南大通用数据技术股份有限公司
- 347 -
图5- 757 会话变量