Postgresql 9.5语法错误

use*_*077 1 postgresql postgresql-9.4 postgresql-9.5

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

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

例外:

Caused by: org.postgresql.util.PSQLException: ERROR: invalid input syntax for type bytea
SQL Status:22P02
Run Code Online (Sandbox Code Playgroud)

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

amp*_*ine 5

ERROR: invalid input syntax for type bytea如果text您正在转换为bytea包含无效的转义序列,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;
Run Code Online (Sandbox Code Playgroud)

我猜你的"xml"列包含或可能包含一些反斜杠.这适用于XML和text列,但在转换为时会出现问题bytea.

你需要逃避反斜杠:

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