1

我在两个具有不同 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 版本之间有什么区别吗?

4

1 回答 1

7

ERROR: invalid input syntax for type bytea如果text您要转换的 abytea包含无效的转义序列, PostgreSQL 将向您抛出一个:

# 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'
)
于 2016-03-17T15:03:53.947 回答