PostgresコンソールエッジケースはPOSIX正規表現ルールに従わない?

こんにちは。テスト用の Discourse インスタンスで、Drupal 7 フォーラムから移行したリンクを変換するために regexp_replace コマンドを pg コンソールで実行しようとしています。200万件近くの投稿には、Markdown に変換する必要がある Textile 形式のリンクがたくさんあります。以下を使用しています。

上記のテスターやテキストエディタでは正しく動作し、次のように変換されます。

  • Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) \"link\":http://www.youtube.com/watch?v=aQjkOmzQ8RT

次のように変換されます。

  • Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)

しかし、Discourse の pg コンソールで次を実行すると:

  • update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');

次のようになります。

  • Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT

(匿名化してすみません。)したがって、重要な部分は次のとおりです。

  • 正しい: [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
  • 間違っている: [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT

SQL クエリでのエスケープ文字の奇妙さや、[]() の特殊関数とリテラルの違いに関係していると思いますが、よくわかりません。何かアイデアはありますか?よろしくお願いします!

PostgreSQL は知りませんが、rails コンソールで動作します。

Post.find_each do |p|
  p.raw.gsub!(/\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)/, '[\\\\1](\\\\2)')
  p.save
end
「いいね!」 2

ああ、Railsコンソールでそれを行う方法を教えていただきありがとうございます。生のSQLコマンドを実行するよりも桁違いに遅いようです(理にかなっています)。コマンドが完了したら、報告します。

Railsプロセスを中止し、pgコンソールに戻りました。また、pgコンソール外でも非常によく機能する、はるかにシンプル(そしてデバッグが容易になる可能性が高い)な正規表現の提案も受け取りました。
\"(.*?)\":(\\S*)\\b

しかし、SQLクエリには明らかに標準外の何かがあります。これはリンクには全く効果がありませんでした。
update posts set raw = regexp_replace(raw, '\"(.*?)\":(\\S*)\\b', E'[\\\\1](\\\\2)', 'g');
これも効果がありませんでした。
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(\\S*)\\b', E'[\\\\1](\\\\2)', 'g');

それで、どうなっているのでしょうか?