Postgresql 9.5 语法错误

Postgresql 9.5 Syntax error

我在两台具有不同 postgres 版本的服务器上执行相同的 sql 脚本。第一个安装了 postgres 9.4.4(工作正常),另一个安装了 9.5(抛出异常)。

UPDATE archived_invoice SET encrypted_xml 
= encrypt(xml::bytea, 'MySuperSecretKey'::bytea, 'aes-ecb/pad:pkcs')

异常:

Caused by: org.postgresql.util.PSQLException: ERROR: invalid input syntax for type bytea
SQL Status:22P02

这两个 postgresql 版本之间有什么区别吗?

如果您要转换为 byteatext 包含无效转义序列,PostgreSQL 将向您抛出 ERROR: invalid input syntax for type bytea

# select '\i is not a valid escape sequence'::bytea;
ERROR:  invalid input syntax for type bytea
LINE 1: select '\i is not a valid escape sequence'::bytea;

我猜您的 "xml" 列包含或可能包含一些反斜杠。这适用于 XML 和 text 列,但在转换为 bytea.

时会出现问题

您需要转义反斜杠:

UPDATE archived_invoice SET encrypted_xml 
= encrypt(
    replace(xml, '\', '\')::bytea,
    'MySuperSecretKey'::bytea,
    'aes-ecb/pad:pkcs'
)