【问题标题】:Permission denied when creating tablespace in postres在 postgres 中创建表空间时权限被拒绝
【发布时间】:2017-03-23 12:45:04
【问题描述】:

我正在尝试在全新安装的 Ubuntu 16.04 的辅助卷上设置 postgres 表空间。我的主卷上只有 60GB,我需要恢复一个 ~55GB 的数据库。我正在使用全新安装的 postgresql-9.5。

我让用户 postgres 成为超级管理员,这样它就可以随意 chmod(我知道不建议这样做,但我有点绝望了)。

sudo usermod -aG sudo postgres

作为用户 postgres,我做了以下事情。

我在辅助驱动器上创建了一个文件夹(名为 postgres_data)并将所有者设置为 postgres。

postgres@Eli:/media/rp3/ExtraDrive1$ ls -lisa
total 28
       2  4 drwxrwxrwx+ 4 root     root      4096 Nov  9 07:46 .
  262146  4 drwxr-x---+ 3 root     root      4096 Nov  9 05:39 ..
      11 16 drwx------  2 root     root     16384 Nov  2 08:14 lost+found
10485761  4 drwxrwxr-x  3 postgres postgres  4096 Nov  9 07:46 postgres_data

然后我创建了一个嵌套文件夹(命名数据),它也归 postgres 所有。我这样做是因为我读到用户 postgres 不仅必须拥有我想要表空间所在的文件夹,还必须拥有包含该文件夹的文件夹。

postgres@Eli:/media/rp3/ExtraDrive1/postgres_data$ ls -lisa
total 12
10485761 4 drwxrwxr-x  3 postgres postgres 4096 Nov  9 07:46 .
       2 4 drwxrwxrwx+ 4 root     root     4096 Nov  9 07:46 ..
10485762 4 drwxrwxr-x  2 postgres postgres 4096 Nov  9 07:46 data

我以用户 postgres 连接到 postgres 并尝试创建表空间:

create tablespace mappify_data location '/media/rp3/ExtraDrive1/postgres_data/data';

但我遇到了权限错误:

create tablespace mappify_data location '/media/rp3/ExtraDrive1/postgres_data/data';

我尝试使用 chmod 700 更改权限,使用 chown 将所有权更改为 postgres:postgres,并将文件夹创建为用户 postgres,但都产生相同的结果。

如果我能得到任何建议,我将不胜感激。我束手无策:(

【问题讨论】:

    标签: database postgresql permissions ubuntu-16.04


    【解决方案1】:

    您的 linux 是否与 SELinux 一起运行?我已经阅读了问题是 SELinux 的线程。

    我刚刚遇到了类似的问题,最终发现另一个可能的错误原因是用户 postgres 没有权限进入表空间上方的目录。

    因此,在您的情况下,请确保用户 postgres 可以浏览目录 /media/rp3/ExtraDrive1/postgres_data/ 的层次结构。

    【讨论】:

      【解决方案2】:

      我试图在 USB 驱动器上设置表空间,但不知何故 postgres 没有获得许可。我总是在 psql 中收到“权限被拒绝”错误消息。问题在于目录权限和遍历用户 = postgres 的父文件夹。最后这个答案帮助了我.....permission denied in a folder for a user after chown and chmod

      root@G41:~# chmod a+x /media/revoltman
      root@G41:~# chmod a+x /media/revoltman/PRASHANTH2
      root@G41:~# chmod a+x /media/revoltman/PRASHANTH2/dir1
      
      testdb2=# CREATE TABLESPACE tspace2 OWNER postgres LOCATION 
      '/media/revoltman/PRASHANTH2/dir1';
       CREATE TABLESPACE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        • 2022-01-19
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        相关资源
        最近更新 更多