web-dev-qa-db-ja.com

Ubuntuでpostgresを使用してCSVファイルにアクセスする許可を許可する方法

私は次のコマンドを使用しています:

copy (select so.name,
      so.date_order,
      sol.name,
      sol.product_Id,
      sol.product_uom_qty , 
      ai.number, 
      ai.date_invoice , 
      so.amount_total , 
      so.amount_tax 
      from sale_order so , 
      sale_order_line sol , 
      account_invoice ai 
      where so.id = sol.order_id 
      and so.name = ai.Origin 
      and ai.state='open') 

to '/home/ekodev/Documents/test1.csv' delimiter ',' csv header;  

ただし、次のエラーが発生します。

********** Error **********

ERROR: must be superuser to COPY to or from a file
SQL state: 42501
Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

許可を変更した場合でもekodev@partner:~/Documents$ Sudo chmod a+rwX /home/ekodev/ /home/ekodev/Documents/ /home/ekodev/Documents/test1.csv

私にはまだ機能しません。

誰が問題が何であるか知っていますか?

16
user3946530

ドキュメント不足:

ファイルに名前を付けるCOPYは、サーバーにアクセスする権限があるファイルの読み取りまたは書き込みを許可するため、データベースのスーパーユーザーにのみ許可されます。

つまり、データベースユーザーにはスーパーユーザーフラグが必要です。フラグを設定できます

ALTER ROLE <rolename> WITH SUPERUSER 

これは静かになる可能性があるため、クライアント側からデータをコピーする代わりにpsqlから\ copyを使用することを検討しました。

15
frlan

このソリューションは、\copy。 ALTERは管理者権限も必要としなかったため、必要ありませんでした。

psql -h <Host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
10
Atihska

または、pgAdminを使用してcsvデータをインポートできます。たとえば、AWSのようにSuperUserロールが使用できない場合に機能します。

1
David Smits

クエリを実行しているロールは、SUPERUSER to COPY FROMファイルである必要があります。それ以外の場合は、STDINからのみコピーできます。

0
DrCabry