web-dev-qa-db-ja.com

Postgresは\ xYYでデータをエンコードされた文字列として解釈するのではなく、プレーンな文字列としてコピーします

Bro IDSによって生成されたURLでいっぱいのログファイルがあります。

BroがASCII以外の文字を含むURLをログに記録すると、\ xYYが挿入されます。YYは16進数の文字コードです。また、一部のURLには「\ x」が含まれています。

COPYまたは\copyコマンドで使用できる設定またはフラグはありますか?postgresがこれらの文字列シーケンスを解釈して、テキストフィールドにそのまま配置するのを防ぐことができますか?

4
potatohead00

バックスラッシュ\は、COPYの(デフォルト)テキスト形式のデフォルトエスケープ文字です。あなたが記述したフォーマットは( ここにマニュアルを引用 )として認識されます

バックスラッシュシーケンスはCOPY FROMによって認識されます
...
\xdigits |バックスラッシュxの後に1桁または2桁の16進数が続き、その数値コードの文字を指定します

..意図したとおりであるようです。
この影響を回避するには、代わりに CSV形式 を使用できます。バックスラッシュは特別な意味を持ちません。

COPY tbl FROM '/path/to/file/log.sql' (FORMAT csv);

その他の違いについては、必ずマニュアルをお読みください。

または、ファイル内のすべての\\\sedスクリプトなどに置き換えることもできます。

上記で問題が解決しない場合は、以下を指定してください:

  • PostgreSQLバージョン
  • データベースのエンコーディング
  • デモデータ
  • COPYを使用するテーブルの定義
  • 使用した正確なCOPY呼び出し
3