次のようにcsv
ファイルをインポートしようとしています:
psql -h 127.0.0.1 -d jira_statistics -U admin -p 5432 -c "COPY bugs FROM '/home/centos/bugs.csv' delimiter '|' csv;"
Password for user admin:
ERROR: could not open file "/home/centos/bugs.csv" for reading: No such file or directory
HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.
ただし、両方のファイルandテーブルはjira_statistics
dbに存在します
[root@jira-statistics ~]# ls /home/centos/bugs.csv
/home/centos/bugs.csv
[root@jira-statistics ~]# psql -h 127.0.0.1 -p 5432 -U admin jira_statistics
Password for user admin:
psql (9.2.24, server 11.1 (Debian 11.1-3.pgdg90+1))
WARNING: psql version 9.2, server version 11.0.
Some psql features might not work.
Type "help" for help.
jira_statistics=# \dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+-------
public | bugs | table | admin
public | devtasks | table | admin
public | releases | table | admin
public | stories | table | admin
COPYが失敗する最も一般的な理由は、ヒントに示されているものですが、エラーは「アクセスが拒否されました」です。
「そのようなファイルまたはディレクトリはありません」というメッセージが表示され、単純なls
はファイルが存在することを示しているため、最初に確認する必要のある説明がいくつかあります。
/home/centos/bugs.csv
は存在しないファイルを指すソフトリンクです。 ls -l
を使用して、宛先がソフトリンクであるかどうかを確認してください。
127.0.0.1:5432
は、ネットワークレベルで別のマシンにリダイレクトされます。この手法は、SSHトンネルを介してリモートサービスに接続するために広く使用されています。
お使いのOSは、 Permission denied エラーを発行せずにpostgres
が/home/centos/bugs.csv
を読み取ることを禁止する高度なセキュリティ/分離機能を使用しています。 postgres
OSアカウントでls -l /home/centos/bugs.csv
をお試しください。
#2#3または#4の場合は、エラーメッセージのHINT部分で提案されているように\copy
を使用します。
これは、データベースのアクセス許可の問題、ファイルシステムのアクセス許可の問題、またはファイルのエンコードタイプの問題の可能性があります。 (上記のいずれでもない場合もあります)。これが私の提案です:
データベース権限の場合:スーパーユーザーまたは特別にロールされたユーザーのみがCOPYを使用できます。 COPYコマンドの postgresqlドキュメント を参照してください。
ファイルまたはコマンドの命名COPYは、データベースのスーパーユーザーまたはデフォルトのロールpg_read_server_files、pg_write_server_files、またはpg_execute_server_programのいずれかが付与されているユーザーにのみ許可されます。
ファイルシステムの権限の場合:サービスがファイルの読み取り権限を持っていることを確認します。