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

Postgresql 从postgres 7.4迁移到postgres 9.2时,无法将值插入bytea类型属性,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我正在将一个应用程序从postgres 7.4迁移到postgres 9.2。在postgres 7.4中插入bytea类型属性值的查询运行良好,在postgres 9.2中引发了PSQLException,错误如下 错误:在“\”处或附近出现语法错误 第1行:…07\000\000\001\002\000\000 |\012\000\000\'\007\000…(错误显示在单引号附近) ***错误*** 错误:在“\”处或附近出现语法错误 SQL状态:42601 字符:39081 我已经阅读了

我正在将一个应用程序从postgres 7.4迁移到postgres 9.2。在postgres 7.4中插入bytea类型属性值的查询运行良好,在postgres 9.2中引发了PSQLException,错误如下

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

***错误***

错误:在“\”处或附近出现语法错误 SQL状态:42601 字符:39081

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


由于应用程序以前使用的是Postgres7.4,所以我们使用的是escape格式。我想知道,如果bytea可以接受Postgres9.2中的转义和十六进制格式,为什么会抛出这个错误。请帮助解决此错误。

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

然而,与此相关的是,第9.1页默认设置了
标准字符串
(我认为它甚至不存在于第7.4页),因此您不能再使用反斜杠来转义文本中的单个引号

参见9.2文档中的兼容性标志和说明:,尤其是
反斜杠
转义字符串
标准字符串

除了修复应用程序之外,解决问题的简单方法是将
标准字符串
设置为关闭,如果日志中的警告数量有问题,则将
退出字符串\u警告设置为关闭(实际上,此警告在将应用程序修复为标准字符串一致性的过程中非常有用)

这可以在位于数据目录中的
postgresql.conf
文件中全局完成。见文件

standard_conforming_strings=off escape_string_warning=off 标准一致字符串=关闭 退出字符串警告=关闭
您使用的是9.2 JDBC驱动程序吗?我从pgAdmin执行了查询,得到了上面提到的错误。请向我们展示完整的查询。您是否验证了pgAdmin版本是否适用于Postgres 9.2?谢谢您的建议。请告诉我如何将这些兼容性标志设置为off。@user2416545:已添加到答案中。我已在postgresql.conf文件中设置了“标准字符串=off”、“转义字符串=off”、“反斜杠=off”和“bytea\u输出=escape”,并重新启动了服务器。当我尝试将值插入bytea属性时,仍然会遇到相同的错误。还有其他解决方法吗?@user2416545:
backslash\u quote=off
就是原因。请注意,我建议关闭另外两个,而不是这一个。如果我保持反斜杠为开且反斜杠为安全编码,则会出现相同的错误。我不清楚哪里出了问题。