3

「\copy」コマンドを使用して、phpからpostgresデータベースにtxt/csvファイルをインポートしようとしています。psqlクライアントとして実行する必要があるため、\copyの代わりにCOPYを使用できません。私のコードは次のとおりです。

$query = '\\'.'copy data1 FROM "data1.txt" WITH CSV HEADER DELIMITER AS "," QUOTE AS "^"';

$result = pg_query($conn,$query);
if (!$result) {
  echo "cannot copy data\n";
} else {
  echo "SUCCESS!";
}

このphpファイルを実行すると、次のエラーが発生します。

PHP Warning:  pg_query(): Query failed: ERROR:  syntax error at or near "\"
LINE 1: \copy data1 FROM "data1.txt" WITH ...
    ^ in script.php on line 30
4

2 に答える 2

9

\copy実際には、を介して実行することはできませんpg_query()SQLコマンドではありません。これは、psqlクライアントのメタコマンドです。

そこで実行できます:

\copy data1 FROM 'data1.txt' WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'

または、shell-commandを実行します。

psql mydb -c "\copy data1 FROM 'data1.txt'
                WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'"

引用符に注意してください。PostgreSQLでは値を一重引用符で囲む必要があります:'value'
二重引用符は識別子用です。実際には、大文字または不正な文字を含む識別子、または予約語にのみ必要です"My table"

于 2012-01-15T11:05:58.180 に答える
0

同じ問題が発生しましたが、rawpsql \copyコマンドを使用する代わりに、Ecto.Adapters.SQL.stream/2関数を使用してファイルの内容を読み取ることにしました。これにより、このブログで説明されているように、ストリームによって提供されるデータを取得するRepo.transaction/1通常のSQLコマンドが実行されます。私はこれのパフォーマンスをテストしていませんが、私はそれがこの答えへの良い追加になるだろうと思いました。COPYSTDIN

于 2020-01-06T15:41:36.183 に答える