我的Postgres日志提供了大量的这些错误。而且我不知道什么是使用包含转义反斜杠,如abc\def,当你要逃避它这样abc\\def值发生

问题描述:

 
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'\\'. 

在最近的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是正确的。

你插入/更新。

检查/调试输入数据发现问题文本

+0

感谢波希米亚。我正在使用rss提要将数据插入到我的数据库中,所以我不确定数据会是什么样的。我们能否拥有能够自动逃脱这些角色的东西? – trackpopular 2012-04-24 00:22:52

+0

如果你使用java,JDBC会自动为你做。其他语言,我不知道。你也可以使用像grep这样的命令行工具来扫描反斜杠,并且你可以直观地检查它们等等 – Bohemian 2012-04-24 00:45:32