【问题标题】:Postgresql "invalid end sequence"Postgresql“无效的结束序列”
【发布时间】:2014-07-05 17:25:28
【问题描述】:

我有一个在我的应用程序上添加用户的功能。它对密码进行一些检查、加盐和散列,然后插入值。现在,当我运行该函数时,我得到了

ERROR: invalid end sequence

(老实说,我用意大利语得到它,并且必须做很多工作才能找到相应的英文字符串)。 现在,单个部分单独工作非常好,但是如果我将所有内容放在一个函数中,我会得到错误,所以我很没有想法。有什么建议吗?

【问题讨论】:

  • 提示:要获取英文错误消息(仅在当前会话中)运行SET lc_messages = 'C'
  • 附加提示:当试图找出错误的来源时,psql 中的\set VERBOSITY verbose 将为您提供更多信息。此外,对于反向翻译,您只需 grep 源代码中的 .po 文件。

标签: postgresql plpgsql phppgadmin


【解决方案1】:

尝试解码错误编码的base64 内容时会发生此错误。示例:

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

错误:无效的结束序列

相对于:

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

【讨论】:

  • 似乎可以使用更好的错误,比如decode(...): invalid base64 end sequence, missing padding?我会提交一个补丁。虽然启用日志详细程度至少会提供有用的上下文消息。
  • \set VERBOSITY verbose, SELECT decode('fredd', 'base64'); 发出 ERROR: 22023: invalid end sequence, LOCATION: b64_decode, encode.c:327
  • 当您对消息进行编码并且输出为 7 个符号,然后将其放入大小为 6 的列中时,可能会发生这种情况。它会被自动截断,您不会怀疑。但是当你解码它时,就会出现这个错误。
【解决方案2】:

也试试

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,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多