0

PostgreSQLのCOPYステートメントを使用すると、次のようにテキストファイルからデータベースのテーブルにデータをロードできます。

COPY CME_ERROR_CODES FROM E'C:\\Program Files\\ERROR_CODES\\errcodes.txt' DELIMITER AS '~'

上記のステートメントは、サーバーが別のWindowsマシンにある場合に、postgresqlクライアントを備えたマシンから実行されます。上記のステートメントを実行すると、私は不平を言いますERROR: could not open file "C:\Program Files\ERROR_CODES\errcodes.txt" for reading: No such file or directory

調査の結果、COPYステートメントが同じパス(C:\ Program Files \ ERROR_CODES)にあるpostgresqlサーバーのマシンでローダーファイル(errcodes.txt)を探していることがわかりました。これをテストするために、postgresqlサーバーのマシンに同じフォルダー構造を作成し、そこにerrcodes.txtファイルを保持しました。その後、COPYステートメントはうまく機能しました。COPYステートメントでは非常に厳しい制約に見えます。これを回避するために必要な設定はありますか?それともCOPYステートメントの振る舞いですか?PostgreSQLドキュメントに関する情報は見つかりませんでした。

4

2 に答える 2

2

標準的な解決策は次のとおりです。

COPY foo (i, j, k) FROM stdin;
1<TAB>2<TAB>3
\.

データは適切にエスケープされ、タブで区切られている必要があります。

実際には、それはドキュメントにあり、文法定義でもSTDINがあります...参照:http ://www.postgresql.org/docs/9.1/static/sql-copy.html

COPYをサポートするプログラミング言語を使用している場合は、pg_putcopyまたは同様の関数があります。したがって、エスケープや連結について心配する必要はありません。

Pythonでこれを手動で行う方法のヒント->Pythonで直接PostgresCOPYを再作成しますか?

Perlの方法-> http://search.cpan.org/dist/DBD-Pg/Pg.pm#COPY_support

お役に立てれば。

于 2012-01-03T15:27:02.683 に答える
0

ドキュメントから

引用:ファイル名を指定したCOPYは、PostgreSQLサーバーにファイルの直接読み取りまたはファイルへの書き込みを指示します。ファイルはサーバーからアクセス可能である必要があり、名前はサーバーの観点から指定する必要があります。STDINまたはSTDOUTを指定すると、クライアントとサーバー間の接続を介してデータが送信されます。

ローカルマシンファイルからサーバーにコピーする場合は、\copyコマンドを使用します。

于 2012-01-03T15:24:57.093 に答える