好的,我们现在有一个数据库,用户登录并保存状态信息。保存状态几乎只是一个JSON blob,但我们发布的客户端有一个错误,其中有一个' \'生成角色,然后每次用户登录新的' \'为每个'添加。如果用户注销并返回足够的时间,这会导致非常严重的困难 - 最终导致用户无法再登录。
我们修复了客户端,但在修复之前,所有这些保存状态都无法使用。
此处的最终目标是使用SQL查询命中数据库以尝试删除所有' \'当连续存在多个时。建议?也许是某种REPLACE电话?
答案 0 :(得分:0)
您可能希望了解CTE。它们允许您以递归方式回调数据,直到达到特定条件。在这种情况下,您将递归调用REPLACE(myString,'\',''),直到\的计数为1。
这将处理从1斜杠到1000+斜杠的任何情况。
答案 1 :(得分:0)
使用类似
的内容UPDATE yourTable SET JsonBlob = regexp_replace(JsonBlob, '\\{2,}', '');
其中'\\{2,}'
表示两个或多个反斜杠。第一个反斜杠是逃避第二个反斜杠。它必须是POSIX正则表达式。
PostgreSQL 9.5.3文档:9.4. String Functions and Operators。