GBase 8s
适配迁移
文章

Gbase8s之Blob

发表于2025-12-11 11:04:43152次浏览1个评论

GBase 8s 支持 BLOB(Binary Large Object)数据类型,用于存储二进制大对象,如图像、音频或程序模块。BLOB 数据以智能大对象形式存储,支持随机访问,最大理论大小为 4TB(2^42 字节),实际大小受系统资源限制。‌1 智能大对象存储在专用的智能大对象空间中,分配的最小磁盘空间为 512 字节。‌1

主要特性

  • 存储与访问‌:BLOB 存储二进制数据,数据库服务器不对内容进行解释。支持随机存取,允许像操作系统文件一样查找和读取数据。‌1

  • 操作函数‌:GBase 8s 提供 SQL 函数用于 BLOB 操作,如 FILETOBLOB(将文件复制到 BLOB 列)、LOTOFILE(将 BLOB 值复制到文件)和 LOCOPY(复制 BLOB 值到新对象)。‌12

  • 插入数据‌:可通过多种方式插入 BLOB 数据,包括使用 dbloadonload 实用程序、LOAD 语句(DB-Access)、FILETOBLOB 函数,或通过 ESQL/C 中的 ifx_lo_t 主变量。‌13

操作示例

  1. 创建表‌:定义包含 BLOB 列的表结构,例如:

    sqlCopy Code

     

    create table tab1 (col1 integer, col2 blob) extent size 16 next size 64 lock mode row;

  2. 插入数据‌:使用 FILETOBLOB 函数从文件插入 BLOB 数据:

    • 服务器端插入:insert into tab1 values (1, filetoblob('/home/gbasedbt/blobtest.png', 'server'));

    • 客户端插入类似,但需确保文件路径可访问。‌2

  3. 查询和导出‌:使用 LOTOFILE 将 BLOB 数据复制到文件:

    sqlCopy Code

     

    select lotofile(col2, '/home/gbasedbt/blobtest2.png', 'server') from tab1 where col1 = 1;

  4. 复制数据‌:使用 LOCOPY 将 BLOB 值复制到另一列:

    sqlCopy Code

     

    update tab2 set col4 = (select locopy(col2) from tab1 where col1 = 1) where col3 = 1;

注意事项

  • 简单 vs. 智能大对象‌:GBase 8s 区分简单大对象(如 BYTE/TEXT)和智能大对象(BLOB/CLOB)。简单大对象不支持随机存取,传输时需完整复制;智能大对象支持随机访问,但更新或删除时可能涉及日志管理,例如 blobpages 在逻辑日志备份前不会被释放。‌14

  • ODBC 接口‌:通过 ODBC 操作 BLOB 时,需设置连接属性 SQL_INFX_ATTR_LO_AUTOMATICTRUE,并使用标准 ODBC API(如 SQLBindParameterSQLBindCol)处理参数绑定和结果集提取。‌5

以上内容基于 GBase 8s 的常见用法,具体实现可能因版本或配置而异。

评论

登录后才可以发表评论
GBase用户21182发表于 7个月前
赞!