web-dev-qa-db-ja.com

PostgreSQLのCOPY関数

PostgreSQLのCOPY機能を使用してCSVファイルをPostgreSQLデータベースにインポートしたいと思います。

documentation のファイル名が記載されている場合、CSVファイルは特定の場所に保存する必要がありますか、それとも任意の場所に保存できますか。

例えば、 copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';tmpと書かれている場合、それはC:ドライブのtmpフォルダーを意味しますか。別のフォルダ名に変更できますか?

8
Jeiman

LinuxとWindowsのファイルパス表記で混乱しているようです。あなたが持っているのは、rootに固定されたLinuxパスです。 Windowsはドライブ文字を使用します。ドライブ文字は、Windowsで実行しているときにも指定できます。

Windows表記を使用する場合は、バックスラッシュをエスケープ使用しない場合は standard_conforming_strings = on -これはPostgres 9.1以降のデフォルトですが、古いバージョンではありません。お気に入り:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ...

standard_conforming_strings = onを使用すると、次のように簡単に記述できます。

COPY data_table from 'C:\tmp\outputdata.csv' WITH ...

PostgreSQL Windowsサーバーは、バックスラッシュではなくスラッシュを使用したデフォルトのパス表記も理解することに注意してください。

SQLの場合 COPY FROM / TO サーバープロセスの所有者(デフォルトではpostgres)が読み取り/書き込み権限を持つ任意のパスを使用できます。

Psqlクライアントの \copy metaコマンドの場合、現在のローカルユーザーの権限が適用されます。

17

はい、もちろん、読み取りアクセス権がある場所を指定できます。ファイルのパスを変更しても問題ありません。

Windowsでは、この方法で円記号をエスケープする必要があるという事実にのみ注意してください。

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';
5
aleroot