我知道其他人已经提出了这个问题,但即使尝试了以前的建议,我仍然会遇到这个错误。。。
当我试图从csv文件复制来填充表时,我会得到一个权限错误。
COPY Eurasia FROM '/Users/Oritteropus/Desktop/eurasia1.csv' CSV HEADER;
ERROR: could not open file "/Users/Oritteropus/Desktop/eurasia1.csv" for reading: Permission denied
SQL state: 42501
正如之前在这些情况下所建议的那样,我更改了文件的权限(chmod 711 eurasia1.csv或chmod a+Reurasia1.csv),并且我还更改了用户权限:
ALTER USER postgres WITH SUPERUSER; #where postgres is my user
然而,我仍然会遇到同样的错误。我还试图手动更改pgAdmin的权限,但似乎已经授予了avery权限。我在Mac Os上工作,使用PostGreSQL 9.2.4。
有什么建议吗?感谢
最好的选择是更改并使用COPY FROM STDIN
,因为这样可以避免很多权限问题。
或者,您可以确保postgres用户可以访问该文件。然而,由于几个原因,这很少比COPY FROM STDIN
更好。
-
COPY TO STDOUT
可能会损坏您的数据。因为这涉及到PostgreSQL的文件I/O,如果COPY FROM STDIN
中存在错误,这也可能是一个问题。 -
如果出于自动化/存储过程的考虑而在服务器端进行操作,那么这很少是一场胜利,因为您将事务性和非事务性效果结合在一起。COPY TO STDOUT和COPY FROM STDIN没有这些问题。(例如,您不必怀疑inode的atime是否真的意味着文件得到了正确处理)。