Postgresql "invalid end sequence"



我有一个在我的应用程序中添加用户的函数。它做一些检查,对密码进行分组和散列,然后插入值。现在,当我运行这个函数时,我得到

ERROR: invalid end sequence

(老实说,我得到的是意大利语,必须做相当多的工作才能找到相应的英文字符串)。现在,单独的部分可以很好地工作,但如果我把所有的东西放在一个函数中,我就会得到误差,所以我很困惑。任何建议吗?

当尝试解码不正确编码的base64内容时发生此错误。例子:

=> select decode('aa', 'base64');

错误:无效的结束序列

相对于:

=> select decode('aa==', 'base64');
<>之前解码-------- x69(1行)

try also

case 
  when char_length(sequence) in (6, 10, 14) then decode(sequence::text || '==', 'base64'::text)::character varying 
  when char_length(sequence) in (7, 11, 15) then decode(sequence::text || '=', 'base64'::text)::character varying 
  when char_length(sequence) in (8, 9, 12, 13) then decode(sequence::text, 'base64'::text)::character varying 
  else null
end AS sequence,

如果不确定输入数据是否正确,
可以捕获decode()异常,并返回err值而不是抛出异常。

自定义函数

decode with exception catch

-------- try decode, ret null if err
CREATE OR REPLACE FUNCTION decode_null(str text, fmt text) RETURNS text AS $$
BEGIN
  RETURN decode(str, fmt);
EXCEPTION
  WHEN OTHERS THEN
    RAISE NOTICE USING
       MESSAGE = format('--decode_null: SQLSTATE %s, MSG: %s', SQLSTATE, SQLERRM);
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

测试
select decode_null('x', 'base64');
--decode_null: SQLSTATE 22023, MSG: invalid end sequence
select decode_null('_', 'base64');
--decode_null: SQLSTATE 22023, MSG: invalid symbol

相关内容

  • 没有找到相关文章

最新更新