从postgres 7.4迁移到postgres 9.2时,无法将值插入bytea类型属性

时间:2013-09-02 13:27:03

标签: postgresql postgresql-9.2

我正在将一个应用程序从postgres 7.4迁移到postgres 9.2。在postgres 7.4中插入bytea类型attribure值的查询工作正常,在postgres 9.2中抛出PSQLException并带有以下错误。

错误:“\”处或附近的语法错误 第1行:... 07 \ 000 \ 000 \ 001 \ 002 \ 000 \ 000 | \ 012 \ 000 \ 000 \'\ 007 \ 000 ...(单引号附近显示错误)

*** 错误 ** *

错误:“\”处或附近的语法错误 SQL状态:42601 性格:39081

我已经阅读了有关bytea_output的postgres文档,可以将其设置为'escape'以输出转义格式的属性内容。还提到bytea类型属性可以接受转义和十六进制格式。

由于该应用程序之前使用的是postgres 7.4,我们正在使用转义格式。我想知道为什么如果bytea可以在postgres 9.2中同时接受转义和十六进制格式,则抛出此错误。请帮助解决此错误。

1 个答案:

答案 0 :(得分:2)

bytea_output告诉输出列中bytea内容的格式,而不是作为SQL语句的一部分提交。正如你猜测的那样,这可能与此无关。

然而,可能相关的是standard_conforming_strings默认设置为PG 9.1(我认为它甚至不存在于7.4中),因此您不能再使用反斜杠来逃避单引号在文字内。

请参阅9.2 doc:Previous PostgreSQL Versions中的兼容性标记和说明,尤其是backslash_quoteescape_string_warningstandard_conforming_strings

如果日志中的警告数量有问题(实际上此警告是在将应用程序修复为标准字符串一致性的过程中最常用。)

这可以在standard_conforming_strings文件中全局完成,该文件位于数据目录中。请参阅文档中的Setting Parameters

standard_conforming_strings=off  
escape_string_warning=off