BFILE类型

BFILE数据类型用于存储指向外部二进制大对象(LOB)文件的指针。这些文件通常存储在数据库服务器的文件系统中,而不是直接存储在数据库内。BFILE数据类型适用于处理大型二进制文件,如图像、音频、视频等。

存储方式:

bfile 不存储实际数据,仅存储指向外部文件的指针。

文件存储在数据库服务器的文件系统中,路径由 DIRECTORY 对象指定。

DIRECTORY 对象:

DIRECTORY对象用于映射文件系统路径到数据库内的逻辑名称,详情CREATE DIRECTORY

创建 DIRECTORY 对象需要 CREATE ANY DIRECTORY 权限,普通用户需要由超级用户或具有相应管理权限的角色可以通过GRANT CREATE ANY DIRECTORY TO user 授予权限。

访问控制:

访问 bfile 数据需要适当的文件系统权限和数据库权限。

数据库用户需有 READ 权限才能访问 DIRECTORY 对象。

示例:

create extension gms_lob;
create extension gms_output;
CREATE or REPLACE DIRECTORY bfile_test_dir AS '/tmp';
create table falt_bfile (id number, bfile_name bfile);
insert into falt_bfile values(1, bfilename('bfile_test_dir','regress_bfile.txt'));
copy (select * from falt_bfile) to '/tmp/regress_bfile.txt';
select gms_output.enable;
 enable 
--------
 
(1 row)

DECLARE
    buff raw(2000);
    my_bfile bfile;
    amount integer;
    f_offset integer := 1;
BEGIN
    my_bfile := bfilename('bfile_test_dir','regress_bfile.txt');
    RAISE notice 'bfile %',my_bfile;
    gms_lob.fileopen(my_bfile, 0);
    amount := gms_lob.getlength(my_bfile);
    RAISE notice 'amount %',amount;
    gms_lob.read(my_bfile, amount, f_offset, buff);
    RAISE notice 'buff %',buff;
    gms_lob.fileclose(my_bfile);
    RAISE notice 'bfile %',my_bfile;
    gms_output.put_line(CONVERT_FROM(decode(buff,'hex'), 'SQL_ASCII'));
END;
/
NOTICE:  bfile bfilename('bfile_test_dir', 'regress_bfile.txt')
NOTICE:  amount 51
NOTICE:  buff 31096266696C656E616D6528276266696C655F746573745F646972272C2027726567726573735F6266696C652E74787427290A
NOTICE:  bfile bfilename('bfile_test_dir', 'regress_bfile.txt')
1	bfilename('bfile_test_dir', 'regress_bfile.txt')
意见反馈
编组 3备份
    openGauss 2025-06-07 22:42:35
    取消