在postgres中汇总bytea

时间:2017-01-13 11:15:34

标签: postgresql stored-procedures type-conversion bytea

我在postgres中存储了一个带有变量的程序,如

DECLARE 
    totLen  BYTEA;
BEGIN 
     totLen = E'\\x000034';
     ....

totLen必须正好是3个字节,我必须总结其他值,如

totLen = totLen + 1;

我尝试了totLen = totLen + E' \ x01'但是没有用。 什么是正确的解决方案?

1 个答案:

答案 0 :(得分:0)

这是一个函数,它将offsbytea的偏移b中的三个字节视为三字节大端整数,并将i添加到该数字:

CREATE OR REPLACE FUNCTION add(b bytea, offs integer, i integer) RETURNS bytea
   LANGUAGE plpgsql IMMUTABLE STRICT AS
$$DECLARE
   result integer := get_byte(b, offs) * 65536 +
                     get_byte(b, offs + 1) * 256 +
                     get_byte(b, offs + 2) +
                     i;
BEGIN
   IF result > 16777215 THEN
      RAISE EXCEPTION 'addition overflows';
   END IF;

   RETURN set_byte(
             set_byte(
                set_byte(
                   b,
                   offs,
                   result / 65536
                ),
                offs + 1,
                (result % 65536) / 256
             ),
             offs + 2,
             result % 256
          );
END;$$;