エラーメッセージは、COPYを使用するスーパーユーザーと同じです。ファイルは、postgresサーバーと同じサーバーにあります。多くの同様の投稿を見たが、1つではない私の質問に答えます。
\copy table_name from '/path/to/csv/file.csv'
with format csv, header true ;
ERROR: syntax error at or near "format"
括弧で結ぶかどうか。 バージョン1 にあるマニュアルをよく読んでください。助けていません。私はいくつかのマイナーなポイントを欠いている必要があります、指摘してください。
バックスラッシュ(\
)で始まるpsqlのコマンドは「 メタコマンド 」と呼ばれ、通常のセミコロンルールには従いませんが、改行で終了します。 man psql
からの小さな抜粋
引数の解析は行の終わり、または引用符で囲まれていない別のバックスラッシュが見つかったときに停止します。引用符で囲まれていないバックスラッシュは、新しいメタコマンドの始まりと見なされます。特別なシーケンス
\\
(2つの円記号)は、引数の終わりを示し、SQLコマンドがあれば、それを解析し続けます。これにより、SQLコマンドとpsqlコマンドを1行に自由に混在させることができます。しかし、いずれにせよ、メタコマンドの引数は、行の終わりを超えて継続することはできません。
manページでこれについてもっともっと言った。はい、それは奇妙で迷惑です。これは、歴史的には、psqlコマンドが、テーブルの列を表示する\ dのように、構築中のクエリを中断せずに実行したいメタコマンドの一種だったためです。しかし、\copy
のような疑似ステートメントの場合、混乱を招きます。
あなたの場合、何が起こっているのでしょうか?psql
が最初の行を実行し、次に2番目をpostgresサーバーに送信します。postgresサーバーはWITH
を 有効なCTEステートメントトークンとして認識します 次にFORMAT
によって混乱します。
あなたが欲しいのは、
\copy table_name from '/path/to/csv/file.csv' with format csv, header true