PostgreSQLインポートCSVファイルにより構文エラーが発生する


8

「COPY」コマンドを使用してCSVファイルをデータベースにインポートしようとしています。ただし、スーパーユーザーになる必要があり、代わりに「\ copy」を使用する必要があるという(一般的なように見える)エラーが表示されます。ただし、\ copyを使用すると、構文エラーが発生します。

ERROR:  syntax error at or near "\"
LINE 1: \copy

キャレットが「\」を指している。これが私のクエリです:

\copy tablename(column2, column3, column4, column5) from '/home/uploads/data.csv' WITH DELIMITER ',' CSV HEADER'

「copy」と「\ copy」の両方を試しました。最初にスーパーユーザーエラーが表示され、後者に構文エラーが表示されます。それを修正する方法について何か考えはありますか?それを機能させますか?

myPgAdminのsql入力フィールドを介してコマンドを実行しています。

私が持っている他の唯一の質問は、tablename(column2、column3など)を介した列のインポートに関するものです。それは正しい構文ですか?

回答:


8

\copyあるpsqlの(コマンドライン)コマンドが。これは通常のSQLコマンドではありません

代わりにCOPYを使用する必要があります(ただし、データベースサーバーにファイルが存在する必要があります)


コマンドラインを使用するのではなく、SQLを介して直接CSVファイルをどのようにインポートしますか?
antjanus 2012

1
@antjanus:私が述べたように(そしてadamが詳細に説明したように)COPYコマンドを使用します
a_horse_with_no_name '24

繰り返しますが、これにはスーパーユーザー権限が必要であり、安全ではありませんよね?
antjanus 2012

4

COPYについてはpostgresのマニュアルを参照してください。

pgAdmin(またはスクリプトや他のdb接続を介して渡すSQL文字列)では、 "\"プレフィックスのないCOPYを使用するだけです。

次のように入力してください: COPY tablename....

コマンドを実行するための適切な権限があることを確認する必要があるため、この場合、データベースにログインして「tablename」への書き込みアクセス権を持っている必要があります。Postgresもファイルにアクセスできる必要があるため、データベースサーバーでパス/ home / uploads /にアクセスできる必要があり、postgresユーザーがファイルを読み取ることができる必要があります。ファイルとディレクトリへの権限を確認してください。


2

私の9.1システムでは、私が受け取るエラーはかなり有益です:

or_examples=> copy comp_table_test from '/tmp/test';
ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

ヒントをもう一度注意深く読むと、stdinからコピーできることがわかります。これは、psqlの\ copyが実際にバックエンドで行うことです。詳細については、http: //www.postgresql.org/docs/8.3/static/sql-copy.htmlにあるドキュメントを参照してください。

次に、コピーの本文をクエリに挿入するか、少なくともそれがpsqlで機能する方法です。


1
copy coordina from '/tmp/filename.txt' WITH NULL AS ;

これがpgAdmin3で行う方法です。ただし、ユーザー権利を慎重に確認してください。権利に問題がある場合があります。(filename.txt / chmod 777のユーザーpostgres)


それを行うには、元の苦情にもかかわらず、dbスーパーユーザーである必要があります。
Chris Travers、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.