2012-05-04 23 views
5

私は、Postgres COPYコマンドを使ってローカルのPostgres DBでJDBCを使用して、CSVファイルからデータベースにデータをコピーしています。私はJavaを使用して、既存のCSVファイルをCSV形式に解析し、DB内のテーブルに一致させます。次に、この解析されたCSVをローカルディスクに保存します。次に、ローカルDBに解析されたCSVを使用して、JDBCにCOPYコマンドを実行させます。すべてが期待どおりに機能します。 私は、JDBCを使ってリモートサーバ上のPostgres DBで同じプロセスを実行しようとしています。 JDBCは、COPYを実行しようとしたときしかし、私は私がCOPYコマンドは、このファイルをローカルで探すようにDBを伝えるという理解で正しいPostgreSQL COPYはリモートからCSVを読み取ることができますか?

org.postgresql.util.PSQLException: ERROR: could not open file "C:\data\datafile.csv" for reading: No such file or directory 

アムますか? I.リモートサーバーはC:ドライブを探しています(存在しません)。

この場合、コピーコマンドにリモートマシンの「ローカル」ではなく自分のコンピュータを表示するよう指示しますか?私はこの機能を示したものは何も見つかりませんでした。

機能が存在しない場合は、データベース全体をローカルに配置した後、リモートサーバーにデータベースにコピーするだけで、何も見つからないことを確認したいと考えています。

ありがとうございました。

答えて

4

あなたはJDBCを使用する場合は、あなたのための最善の解決策は、そうでない場合 http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

PostgreSQLのCOPYのAPIを使用することです(すでに他の人が述べたように)あなたが上のローカルファイルにアクセスすることを可能にするのpsqlから\コピーを使用することができますクライアントマシン

+0

あなたの答えをありがとう。私はこの階級が存在することに気付かなかった。私はそれを私の解析/インポートプログラムに実装しようとしています。将来のデータを処理する。 – babcoccl

1

私の知る限り、COPYコマンドは、データベースが実行されているマシンからローカル(stdinまたはファイルから)を読み取るためにのみ使用できます。

その後、クライアントマシン上のファイルからの読み込み\copyコマンドを行うためにpsqlを使用し、あなたはあなたのJavaの変換を実行するシェルスクリプトを作ることができます。

+1

COPYは "FROM STDIN"と読むことができます。ディスクからファイルを読み込む必要はありません。 –

+0

@FrankFarmerあなたのコメントごとに更新されました。 –

5

クライアント・マシン上で次のようにあなたのクライアント

上、実行し

COPY testtable (column1, c2, c3) FROM STDIN WITH CSV; 
1,2,3 
4,5,6 
\. 

をお使いのSQLファイルを作成します。

psql -U postgres -f /mylocaldrive/copy.sql -h remoteserver.example.com

+0

ありがとう、これは最終的に私のローカルマシン上にテーブルが作成されていたので、私が(何らかの形で)行ったことです。今後は、以下のAPIを使用していきます。 – babcoccl

関連する問題