在plpgsql中将bytea与bytea进行比较

时间:2018-12-13 02:05:00

标签: postgresql plpgsql

我正在编写一个函数,该函数将从大对象读取数据并将其与以arg提供的数据进行比较。 (我想确保自己写的正确,这是写后的健全性检查)

我已经研究出如何分块读取大对象

   fd := lo_open(looid,x'40000'::int);
    loop
        buff := loread(fd,  1000);
        len := octet_length(buff);
        raise NOTICE 'buff %', len;
        if len = 0 then
           exit;
        end if;
    end loop;
    return 0;

但停留在看似简单的操作上,即将每个块与我的输入bytea的等效切片进行比较(例如indata)。我什至不知道从哪里开始,广泛的讨价还价没有任何线索

1 个答案:

答案 0 :(得分:2)

使用substring(string [from int] [for int])

循环看起来像这样:

offst := 1;
loop
    buff := loread(fd,  1000);
    len := octet_length(buff);
    raise NOTICE 'buff %', len;
    if buff <> substring(indata from offst for 1000) then
        return false;
    end if;
    if len = 0 then
        return true;
    end if;
    offst := offst + len;
end loop;