1. ホーム
  2. postgresql

[解決済み] ポストグレス \コピー構文

2022-03-06 04:15:13

質問

CentOS 7上のPostgreSQL 9.5で、PostgreSQL 9.5という名前のデータベースを作成しました。 sample といくつかのテーブルがあります。 私は .csv のデータを /home/MyUser/data を各テーブルに配置します。 例えば TableName.csv に対して、テーブル "TableName" .

csvファイルを各テーブルに読み込むにはどうすればよいですか?


試したことがうまくいかず、何が間違っているのかがわかりません。

DB内部から読み込む

$ psql sample

sample=# COPY "TableName" FROM '/home/MyUser/data/TableName.csv' WITH CSV;

ERROR:  could not open file "/home/MyUser/data/TableName.csv" for reading: Permission denied

これは、ファイルのパーミッションに問題があることを示唆しています。 のすべてのファイルが data/-rw-r--r-- で、ディレクトリそのものは drwxr-xr-x . ですから、ファイルのパーミッションは問題ではないはずです(私が何かを見逃していない限り)。 インターネットでは COPY はパーミッションに問題があるので、試しに \copy .

CLIから読み込む

$ psql \copy sample FROM /home/MyUser/data/TableName.csv WITH CSV

psql: warning: extra command-line argument "FROM" ignored
psql: warning: extra command-line argument "/home/MyUser/data/TableName.csv" ignored
psql: warning: extra command-line argument "WITH" ignored
psql: warning: extra command-line argument "CSV" ignored
psql: FATAL:  Peer authentication failed for user "sample"

これは構文エラーのようですが、ドキュメントが特に役に立ちません( man psql では /\copy ). また、以下のようにしても同じ結果になりました。

$ psql \copy sample."TableName" FROM /home/MyUser/data/TableName.csv WITH CSV
$ psql \copy sample FROM /home/MyUser/data/TableName.csv WITH DELIMITER ','

他にもいくつかの順列があり、同様のエラーが発生します。

使用するWebリソース

解決方法は?

パーミッションについて。

ファイルにアクセスするには、以下のパーミッションが必要なことをお忘れなく。 すべて ディレクトリを指定します。ですから、例えば、OSのユーザー postgres に対するパーミッションを持っていません。 /home/MyUser ディレクトリに移動すると、観察されたエラーメッセージが表示されます。

について \copy :

を使用する必要があります。 -c オプションでコマンドを psql :

$ psql -c "\copy sample FROM '/home/MyUser/data/TableName.csv' WITH (FORMAT CSV)"