сравнивая bytea с bytea в plpgsql - PullRequest
       10

сравнивая bytea с bytea в plpgsql

0 голосов
/ 13 декабря 2018

Я пишу функцию, которая будет читать данные из большого объекта и сравнивать их с данными, представленными как аргумент.(Я хочу убедиться, что я написал это правильно, это проверка работоспособности записи)

Я разработал способ чтения большого объекта кусками

   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;

, но застрял накажущаяся простой операция сравнения каждого куска с эквивалентным фрагментом моего входного байта (скажем, indata).Я даже не знаю, с чего начать, и обширные позолоты не дают никаких подсказок

1 Ответ

0 голосов
/ 13 декабря 2018

Использование 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;
...