【问题标题】:Unable to insert values into bytea type attribute while migrating from postgres 7.4 to postgres 9.2从 postgres 7.4 迁移到 postgres 9.2 时无法将值插入到 bytea 类型属性中
【发布时间】:2013-09-05 15:13:57
【问题描述】:

我正在将应用程序从 postgres 7.4 迁移到 postgres 9.2。在 postgres 7.4 中插入 bytea 类型属性值的查询在 postgres 9.2 中抛出 PSQLException 并出现以下错误。

错误:“\”处或附近的语法错误 LINE 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 中可以同时接受转义和十六进制格式,为什么会引发此错误。请帮助解决此错误。

【问题讨论】:

  • 您使用的是 9.2 的 JDBC 驱动程序吗?
  • 我从 pgAdmin 执行查询并得到上述错误。
  • 请向我们展示完整的查询。您是否确认 pgAdmin 版本适合使用 Postgres 9.2?

标签: postgresql postgresql-9.2


【解决方案1】:

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

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

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

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

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

standard_conforming_strings=off escape_string_warning=关闭

【讨论】:

  • 感谢您的建议。您能告诉我如何将这些兼容性标志设置为关闭。
  • @user2416545:添加到答案中。
  • 我在 postgresql.conf 文件中设置了 'standard_conforming_strings=off'、'escape_string_warning=off'、'backslash_quote=off' 和 'bytea_output=escape' 并重新启动了服务器。当我尝试将值插入到 bytea 属性时,我仍然遇到同样的错误。还有其他解决方法吗?
  • @user2416545: backslash_quote=off 是原因。请注意,我建议关闭其他两个,而不是这个。
  • 如果我保持反斜杠引号=on 和反斜杠引号=安全编码,也会出现同样的错误。我不清楚我哪里出错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 2017-09-22
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
相关资源
最近更新 更多