COPY FROM
を使用してテーブルに簡単にロードできるCSVファイルがありますが、問題は、ファイルがデータベースのbytea
フィールドに格納されていることです。
このデータでCOPY
を使用して一時ファイルに書き出す唯一の方法ですか、それともおそらくCOPY FROM STDIN
に関係する巧妙なトリックがありますか?
私がCSVをbytea
として保存しているのを確認できる唯一の理由は、それを _COPY TO BINARY
_ で作成した場合です。これがバイナリデータでないことを確認する必要があります。もしそうなら、これを行う必要はなく、byteaを_COPY FROM STDIN
_にフィードするだけで問題全体がオフマークになります。
convert_from
_の使用問題は、主にbytea
をtext
に変換する方法です。そのためには、 _convert_from
_ を使用します。私の回答 そのプロセスの詳細についてはこちら を参照してください。
bytea
をtext
に取得するメソッドを取得したら、次のいずれかを実行できます。
COPY FROM STDIN
_の呼び出しでpsql -d myDb -c "SELECT convert_from(col ...) FROM tbl"
をラップし、それを利用します。INSERT
/UPDATE
内から解析します(_Text_CSV::XS
_)。このようにすることで、COPY
が受け入れ可能な形式で読み取りと出力を行うために、2番目のセッションを呼び出す必要がなくなります。