postgresql -\复制权限在将 CSV 导入 Ubuntu 上的 Postgres 时被拒绝

标签 postgresql csv ubuntu-14.04

我在 Ubuntu 14.04 上使用 Postgres,我一直在尝试将一个 csv 文件导入到 Postgres 中名为“天气”的表中。我看过问题 Postgres ERROR: could not open file for reading: Permission denied并尝试使用 \copy 命令而不是常规副本,但我仍然遇到相同的 Permission Denied 错误。

我有点犹豫要为所有用户修改该目录的所有文件的所有权权限(如第一个答案中所建议的那样)。这是复制语句:

\copy weather from '/home/user1/Dropbox/Development/Databases/SQL/Codeschool/TrySQL/temp_data.csv' HEADER DELIMITER ',' CSV

这是终端的屏幕截图:

enter image description here

为什么 \copy 在这里不起作用?

最佳答案

您肯定必须更改一些权限,因为 Postgres 无法读取您的文件。 Postgres 和你是不同的用户,所以如果你不给它权限,它就不能读取你的文件。\copy 解决方案只有在你的设置中而不是 postgres 是运行 psql 命令的用户时才有效。

您始终可以制作该文件的副本,将该文件的权限分配给 Postgres 可以执行的目录中的用户 Postgres,然后删除该文件,或者您可以这样做:

您必须更改的内容取决于此命令的输出(以 user1 身份运行):

namei -l /home/user1/Dropbox/Development/Databases/SQL/Codeschool/TrySQL/temp_data.csv

(如果尚未安装,您可能需要在运行此命令之前sudo apt-get install util-linux)

此命令将列出文件及其所有父目录的当前权限,以便我们找到解决方案。

假设所有目录都有以“x”结尾的条目,如下所示:

drwxr-xr-x user group filename
drwxr-xr-x
drwxr-xr-x
-rw-------

那么以下两种解决方案中的任何一种都可以。

  1. 如果您不想更改所有用户的权限并且您有 sudoer 权限,您可以这样做

    sudo chown /home/user1/Dropbox/Development/Databases/SQL/Codeschool/TrySQL/temp_data.csv postgresql
    

    但是,这种方法会撤销您对该文件的访问权限,这可能是您不希望看到的。但是你总是可以在完成导入后将文件返回给你

    sudo chown /home/user1/Dropbox/Development/Databases/SQL/Codeschool/TrySQL/temp_data.csv user1
    
  2. 如果您不介意所有用户都读取您的文件,那么您可以执行(作为 user1 并且没有 root 权限)

    chmod a+r /home/user1/Dropbox/Development/Databases/SQL/Codeschool/TrySQL/temp_data.csv
    

    我建议您执行此解决方案。它只会更改该文件的权限,以便您计算机上的所有用户都可以读取它。然而,虽然默认情况下在 Linux 中大多数目录都可以被任何人打开,但如果不是所有用户都对您的目录具有执行权限,这就有可能不起作用。

    当然,一旦您阅读了该文件,您始终可以再次限制权限

    chmod a-r /home/user1/Dropbox/Development/Databases/SQL/Codeschool/TrySQL/temp_data.csv
    

    如果这些解决方案都不适合您,请对上面第一个命令的输出进行评论。

关于postgresql -\复制权限在将 CSV 导入 Ubuntu 上的 Postgres 时被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31999387/

相关文章:

bash - 将 split 命令的输出写入单独的目录

c - 未找到 Qt 创建者标准头文件

ubuntu - 先前的存储驱动程序 "aufs"失败 : driver not supported Error starting daemon: error initializing graphdriver: driver not supported

database - "permission denied"用于 pg_dump 输出文件

c# - 哪个 IsolationLevel 最适合在 TransactionScope 中成功处理我在 C# 中的数据?

python - 删除巨大的 csv 中已知的确切行

python - 如何使用python将csv文件转换为文本文件?

SQL,获取所有自定义数据类型的列表

postgresql - 如何在 PostgreSQL 中聚合多行的多列?

具有多个值的 C++ 文件解析器