在PostGreSQL中从csv文件中复制表时出现权限错误[英] permission error when populating a table in PostGreSQL copying from a csv file

问题描述

我知道其他人已经提出了这个问题,但即使尝试以前的建议,我仍然会收到此错误...

当我尝试填充从 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+r eurasia1.csv),我还更改了用户权限:

ALTER USER postgres WITH SUPERUSER; #where postgres is my user

但是,我仍然遇到同样的错误.我还尝试手动更改 pgAdmin 的权限,但似乎已经赋予了每个权限.我正在使用 Mac Os,并且正在使用 PostGreSQL 9.2.4.

有什么建议吗?谢谢

推荐答案

最好的选择是更改和使用 COPY FROM STDIN,因为这样可以避免相当多的权限问题.

或者,您可以确保 postgres 用户可以访问该文件.这很少比 COPY FROM STDIN 好,但有几个原因.

  1. COPY TO STDOUT 可能会损坏您的数据.因为如果 COPY FROM STDIN 中存在错误,这也涉及 PostgreSQL 的文件 I/O,这也可能是一个问题.

  2. 如果您出于自动化/存储过程的考虑而在服务器端执行此操作,那么这很少是胜利,因为您将事务性和非事务性效果结合在一起.COPY TO STDOUT 和 COPY FROM STDIN 没有这些问题.(例如,您不必怀疑 inode 的 atime 是否实际上意味着文件已正确处理).

本文地址:https://www.itbaoku.cn/post/1739748.html