Postgresql 9.5语法错误

时间:2016-03-17 14:40:03

标签: 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')

例外:

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

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

1 个答案:

答案 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'
)