5

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

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

COPY コマンドが DB にこのファイルをローカルで探すように指示することを理解するのは正しいですか? つまり、リモート サーバーはその C: ドライブを探しています (存在しません)。

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

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

ご協力いただきありがとうございます。

4

3 に答える 3

5

クライアント マシンで次のように sql ファイルを作成します。

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

次に、クライアントで実行します

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

于 2012-05-04T18:23:24.513 に答える
4

JDBC を使用する場合、最善の解決策は PostgreSQL COPY API http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.htmlを使用することです。

それ以外の場合(他の人がすでに指摘したように)、クライアントマシン上のローカルファイルにアクセスできる psql から \copy を使用できます

于 2012-05-04T18:22:26.443 に答える
1

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

Java変換を実行するシェルスクリプトを作成してから、クライアントマシン上のファイルから読み取るコマンドpsqlを実行するために使用できます。\copy

于 2012-05-04T18:17:19.450 に答える