0

我正在将应用程序从 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

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

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

4

1 回答 1

2

bytea_output告诉输出列中 bytea 内容的格式,而不是作为 SQL 语句的一部分提交时。如您所料,它可能与这里无关。

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

请参阅 9.2 文档中的兼容性标志和解释:Previous PostgreSQL Versions,尤其backslash_quoteescape_string_warningstandard_conforming_strings.

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

这可以在postgresql.conf位于数据目录中的文件中全局完成。请参阅文档中的设置参数

standard_conforming_strings=off  
escape_string_warning=关闭
于 2013-09-02T13:42:40.907 回答