10

PostgreSQL の COPY 関数を使用して、CSV ファイルを PostgreSQL データベースにインポートしたいと考えています。

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

たとえば、copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';. それが言うところでtmp、それは C: ドライブの tmp フォルダを意味しますか。別のフォルダ名に変更できますか?

4

2 に答える 2

18

LinuxとWindowsのファイルパス表記で混乱しているようです。ルートに固定された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サーバーは、円記号ではなくスラッシュを使用したデフォルトのパス表記も理解することに注意してください。

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

psqlクライアントの\copymetaコマンドには、現在のローカルユーザーの権限が適用されます。

于 2012-04-09T21:04:11.717 に答える
5

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

Windows では、この方法でバックスラッシュをエスケープする必要があるという事実だけに注意してください。

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';
于 2012-04-09T20:53:41.503 に答える