我正在使用以下命令:
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
它仍然对我不起作用。
有人知道问题出在哪吗?
8条答案
按热度按时间6xfqseft1#
我使用
\copy
时,这个解决方案很有效。ALTER没有,因为这也需要管理员权限。tkqqtvp12#
超出文件范围:
COPY命名文件只允许数据库超级用户使用,因为它允许阅读或写入服务器有权访问的任何文件。
这意味着,您的数据库用户需要具有超级用户标志。您可以使用以下内容设置标志
由于这可能是安静的危险,你是否考虑使用\copy from psql从客户端复制数据。
xxhby3vn3#
或者,您可以使用pgAdmin导入csv数据。当超级用户角色不可用时有效,例如在AWS中。
km0tfn4u4#
对我的案子很有效
mzsu5hc05#
从数据库内部使用postgres用户:
修改文件权限(所有用户均可读写):
从特定表中获取数据:
jmp7cifd6#
没有必要像其他答案中建议的那样授予超级用户权限。
kcugc4gi7#
运行查询的角色必须是
SUPERUSER
到COPY FROM
文件。否则,只能从STDIN
复制。h9vpoimq8#
以超级用户身份登录:
连接到您的数据库:
授予您的用户访问权限:
在此之后,在另一个选项卡中,当您以用户身份连接到数据库时:
您应该看到:
这意味着
user
可以在sql中使用copy
。我用csv做了几个测试,在我的测试中,我只能让它使用完整路径: