web-dev-qa-db-ja.com

byteaに保存されているCSVデータをインポートするにはどうすればよいですか?

COPY FROM を使用してテーブルに簡単にロードできるCSVファイルがありますが、問題は、ファイルがデータベースのbyteaフィールドに格納されていることです。

このデータでCOPYを使用して一時ファイルに書き出す唯一の方法ですか、それともおそらくCOPY FROM STDINに関係する巧妙なトリックがありますか?

予防策

私がCSVをbyteaとして保存しているのを確認できる唯一の理由は、それを _COPY TO BINARY_ で作成した場合です。これがバイナリデータでないことを確認する必要があります。もしそうなら、これを行う必要はなく、byteaを_COPY FROM STDIN_にフィードするだけで問題全体がオフマークになります。

_convert_from_の使用

問題は、主にbyteatextに変換する方法です。そのためには、 _convert_from_ を使用します。私の回答 そのプロセスの詳細についてはこちら を参照してください。

byteatextに取得するメソッドを取得したら、次のいずれかを実行できます。

  • _COPY FROM STDIN_の呼び出しでpsql -d myDb -c "SELECT convert_from(col ...) FROM tbl"をラップし、それを利用します。
  • CSV行を処理できるsomethingを使用してINSERT/UPDATE内から解析します(_Text_CSV::XS_)。このようにすることで、COPYが受け入れ可能な形式で読み取りと出力を行うために、2番目のセッションを呼び出す必要がなくなります。
1
Evan Carroll