我的Postgres Log提供了大量的这些错误。而且我不确定发生了什么

时间:2012-04-23 23:40:16

标签: postgresql postgresql-8.4

2012-04-23 16:35:07 PDTWARNING:  nonstandard use of \\ in a string literal at character 117
2012-04-23 16:35:07 PDTHINT:  Use the escape string syntax for backslashes, e.g., E'\\'.

2 个答案:

答案 0 :(得分:2)

在最近的PostgreSQL中,字符串应该符合标准,这意味着没有转义 - 默认情况下。有一些设置可以控制它:

  • standard_conforming_strings - 自9.1以来默认开启。
  • escape_string_warning - 也默认为开启。

这意味着像'a\nb'这样的字符串文字被解析为4个简单字符。如果您希望使用转义解析它,则会有一个语法E'a\nb',它会将其解析为3个预期字符。请参阅http://www.postgresql.org/docs/current/interactive/runtime-config-compatible.html以获得正确的解释。

我怀疑(如果你正在运行PostgreSQL 9.1或更高版本),你有standard_conforming_strings = off - 可能让使用转义编写的旧查询正确运行。但是,警告仍然处于启用状态,因为它警告您使用了弃用语法。

正确的解决方案是修复所有查询以使用E前缀,如果您想要删除警告。当然假设逃避是故意的 - 如果没有,那么设置standard_conforming_strings = on是正确的。

答案 1 :(得分:1)

您应该使用包含未转义的反斜杠的值插入/更新,例如abc\def,当您应该像abc\\def那样将其转义时。

检查/调试输入数据以查找问题文本