- ベストアンサー
csvデータのインポートでのエラーとアクセス権限変更について
- 書籍の指示に従って、Linux(RedHat8.0)とPostgreSQLのユーザ名とデータベース名を同一にしましたが、csvデータのインポートでエラーが発生しました。
- csvデータのパスのアクセス権限を確認すると、Linuxのユーザ名とPostgreSQLのユーザ名が一致していないことがわかりました。
- インポート時には、パスが通っていないエラーメッセージも表示されました。この問題を解決するためには、パスの設定とアクセス権限の変更が必要です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1. Linuxのユーザー"database_6"でログインする。 2. psqlを使ってデータベースを"database_6"を、 PostgreSQLのユーザー"postgres"で開く。 psql [オプション] [データベース名 [ユーザー名]] psql database_6 postgres 3. COPYコマンドを実行する。 > ERROR: could not open file "/home/database_6/database_euc_4.csv" for reading: 許可がありませえん Linuxの"database_6"ユーザー以外で操作していませんか? > -bash: COPY: command not found psqlを使わずに、直接LinuxのコンソールでSQL文を実行しようとしていませんか?
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
postgrsqlをちゃんと使える人…ではありませんが…… >-r-xr-xr-x 1 database_6 database_6 113166 6月 5 19:37 database_euc_4.csv csvファイルに実行属性は不要でしょう。 # vfatとかなら付いているかも知れませんが…。 # 構成不明なのでなんとも… >-bash: COPY: command not found >とエラーメッセージが表示され、パスが通っていないようです。これは、~/.bash_profileが上手く読み込まれていないということでしょうか? COPYとやらがコマンドやスクリプトならそうでしょう。 が……sqlのコマンドだったら、そもそもbashがエラー出す時点でおかしくないですか? エラー吐くならpsql辺りかと思いますが…。 csvのインポートをどんな手順でやっているのか…とか、 どこのWebページ参照してどんなコマンド投入しているのか…不明点が多いかと。 あと……回答1つですぐ締め切るのはよろしくないかと思いますが。 「ちゃんとpostgesqlを使える」人からの回答を締め出すことになりませんか? 「おお、これなら判る。回答しようか…」というところで、私みたいなpostgesqlちゃんと使っていない人の、参考になるか判らない回答で締め切られていたら… 次に回答しよう。という気力も削がれるかと。 # まぁ、だったらこんな回答するな…というのもあるかも知れませんけどね。
お礼
回答ありがとうございます。 cvsファイルの属性は、Windows側で作成されたものをコピーしたときのものです。 ユーザdatabase_6でログインし、Terminalを起動してユーザpostgresでdatabase_6に接続し、 COPY music FROM '/home/database_6/database_euc_4.csv' WITH CSV; を実行すると、 ERROR: could not open file "/home/database_6/database_euc_4.csv" for reading: 許可がありませえん というエラーメッセージが表示されました。ユーザdatabase_6でログインし、Terminalを起動して、 psql database_6 をそのまま実行すると、 bash: psql: command not found というエラーメッセージが表示されます。また、ユーザdatabase_6でログインし、Terminalを起動して、 COPY music FROM '/home/database_6/database_euc_4.csv' WITH CSV; をすぐに実行すると、 bash: COPY: command not found というエラーメッセージが表示されます。 上記回答を早く締め切った件ですが、新しい質問(5件までしか質問ができません)をするため、止むを得ず、閉めてしまいました。申し訳ありませんでした。
補足
「ユーザpostgresでdatabase_6に接続」とは、正確にはTerminalを起動し、 su - postgres psql database_6 を実行したことです。
お礼
回答ありがとうございます。 ログインとは、Terminalでなく、Linuxという意味でよろしいでしょうか? ユーザdatabase_6でログインし、Terminalを起動して、 psql database_6 postgres を実行すると、 bash: psql: command not found というエラーメッセージが表示されます。
補足
Terminalを起動し、 su - postgres psql database_6 を実行した後、 COPY music FROM '/home/database_6/database_euc_4.csv' WITH CSV; を実行しました。