我在具有不同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版本之间有什么区别吗?
答案 0 :(得分:5)
如果您ERROR: invalid input syntax for type bytea
中的text
包含无效的转义序列,PostgreSQL会向您抛出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'
)