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