質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

788閲覧

postgreSQL \copy 許可がありません

ttok

総合スコア1

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2023/06/19 13:10

実現したいこと

Postgresqlにcsvデータをインポートしたいです。

前提

DjangoでWebアプリを作成しています。
AWS EC2上にpostgresqlをインストールしました。
home/user名/xxx.csvを配置しました。
psqlコマンドでpostgresqlに接続し、以下を入力しました。
postgres-# \copy table_name from 'home/user名/xxx.csv' with csv;
すると下記エラーメッセージが表示されました。

home/user名/xxx.csv: 許可がありません

試したこと

sudo chmod 600 xxx.csvでuser名の権限を付与
postgresqlを再起動して再度/copyコマンドを実行。上記のエラー。
sudo chown postgres:postgres xxx.csvでファイルオーナーをpostgresに変更し、postgresqlを再起動して再度/copyコマンドを実行。上記のエラー。

補足情報(FW/ツールのバージョンなど)

postgresql15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2023/06/20 06:51 編集

そのcopyコマンド実行ユーザーはスーパーユーザーなのでしょうか。 あと、相対パスで指定しているのはどのような意図がありますか?絶対パスにした場合はどうでしょうか
ttok

2023/06/20 12:50

ご連絡頂きありがとうございます。 \copyコマンド実行ユーザはpostgresです。 postgres | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS バイパス | {} 上記のようにスーパーユーザーであることを確認いたしました。 一方、テーブルの所有者ならびに、xxx.csvの所有者は"user名"です。 \copyコマンドは、絶対パスを記載する必要があると下記に記載あったため、絶対パスで記載しております。 https://tech.pscsrv.co.jp/2020/05/08/%E3%80%90postgresql%E3%80%91%E4%B8%80%E6%8B%AC%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%85%A5%E5%87%BA%E5%8A%9B%E3%81%A7%E3%81%8D%E3%82%8Bcopy%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/
ttok

2023/06/20 13:09

'user名'にスーパーユーザーの権限を与え、'user名'としてdbに接続、\copy table_name from 'home/user名/xxx.csv' with csv;を実行しましたが、同じく、home/user名/xxx.csv: 許可がありませんが表示されました。
guest

回答2

0

自己解決

ご回答頂き、ありがとうございます。
本件、無事にcsvファイルをコピーしてテーブルへデータを流すことができました。
postgresqlへの接続コマンドを以下のように変更すると、うまくいきました。
変更前:sudo -u postgres -i psql
変更後:psql -d db名
sudoで入るのと、psqlで入るのとで接続するuser名が異なることが原因かと推察します。
(home/user名/xxx.csvのpermissionは444のままでも無事にcopyコマンド実行できました。)

投稿2023/08/05 10:39

ttok

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DB側の操作権限とファイルアクセスに対する使用権限が混同されている気がします。
Postgres側の操作権限をいくら全開にしたところで、ファイルアクセス権までは干渉されません。

home/user名の権限が644などになっていないですか?

投稿2023/08/01 07:41

FKM

総合スコア3660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問