【问题标题】:Trying to get Postgres setup in my environment but can't seem to get permissions to intidb试图在我的环境中设置 Postgres,但似乎无法获得 intidb 的权限
【发布时间】:2012-05-03 12:31:20
【问题描述】:

我正在关注最近关于设置 PostgreSQL 的 RailsCast,但我无法运行 initdb /usr/local/var/postgres 命令。每次我运行它,我都会收到这个错误:

The files belonging to this database system will be owned by user "Construct".
This user must also own the server process.

The database cluster will be initialized with locale en_US.UTF-8.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english".

creating directory /usr/local/var/postgres ... initdb: could not create directory "/usr/local/var": Permission denied

【问题讨论】:

  • 您的问题解决了吗?
  • 我也有同样的问题...还没有找到解决办法。

标签: database postgresql chmod chown


【解决方案1】:

这应该可以正常工作:

# sudo mkdir /usr/local/var/postgres
# sudo chmod 775 /usr/local/var/postgres
# sudo chown construct /usr/local/var/postgres
# initdb /usr/local/var/postgres

使用您的用户名代替构造。因此,如果您的计算机用户名是 WDurant,则代码将为:

# sudo chown $(whoami) /usr/local/var/postgres

【讨论】:

  • sudo chown $(whoami) /usr/local/var/postgres/
  • 很抱歉听到您遇到此类问题@Geuis。我应该添加一些上下文来表明我只是想表明sudo chown $(whoami) /usr/local/var/postgres/ 只是一种使用$(whoami) 以编程方式确定您的用户名的方法,而不是像sudo chown wdurant /usr/local/var/postgres 那样输入它。无论如何,希望您能解决所有问题。祝你好运。
  • 谢谢@jhrr。啊,对不起昨晚的丑陋评论。并不是真的针对你个人。尝试进行此设置时,我感到非常沮丧。我删除了之前的评论,但我会将这一部分留在这里,以供将来需要此内容的任何人使用。 “问题不仅在于所有者,还在于目录的权限。没有其他答案指出需要调整目录权限。目录上的 chmod 755”
  • 别担心,我们都去过那里。
  • 使用自制软件,我在前三行加上brew postinstall postgresql,最后我的问题似乎得到了解决。
【解决方案2】:

如果您在 Arch Linux 上运行,请像这样使用:

sudo mkdir /var/lib/postgres
sudo chmod 775 /var/lib/postgres
sudo chown postgres /var/lib/postgres

sudo -i -u postgres

[postgres]$ initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
[postgres]$ exit

sudo systemctl start postgresql.service

sudo -i -u postgres

【讨论】:

  • 真棒 - 用于创建自定义数据目录! :-D
  • 或许可以考虑将其添加到arch wiki ... 我认为权限部分尚未解释
  • 我遵循了这些命令,但仍然遇到权限问题。我不是 Ubuntu 16.04
【解决方案3】:

你实际上需要SUpostgres用户

  • sudo su - postgres

然后你就可以运行命令了

  • initdb -E UTF8(我更喜欢现在设置它,因为 UTF8 非常灵活,这会将所有集群创建为 UTF8 [除非您另有明确指定])

那么您需要创建您的用户(如果尚未创建)

  • $ createuser -s -U postgres
  • $ Enter name of role to add: {{ my login name }}(这似乎是Construct

然后你可以退出 postgres 用户,你可以创建自己的数据库

  • $ createdb

【讨论】:

    【解决方案4】:

    您以哪个用户身份运行 initdb?如果您不是 root,您可能没有在 /usr/local 中创建目录的权限。我建议以 root 身份创建 /usr/local/var/postgres,然后 chown'ing 来构建:

    # mkdir -m 0700 -p /usr/local/var/postgres
    # chown construct /usr/local/var/postgres
    

    那么你的 initdb(作为构造运行)应该有权限。

    另外,请注意 Unix 用户名通常全小写(但也区分大小写);您确定您的 Construct 用户实际上是大写的吗?如果是这样,你真的确定你希望它被大写吗 - 很多东西都会坏掉。

    (仅供参考:对于此类 Unix 问题,您可能会发现 Unix.SEAsk Ubuntu 提供更快的答案)

    【讨论】:

      【解决方案5】:

      现在至少在 CentOS/RHEL 中应该是这样:

      # install the binaries
      sudo yum install -y postgresql-server
      # create the database
      sudo su postgres -c 'postgresql-setup initdb'
      # enable the service to start on VM start
      sudo systemctl enable postgresql.service
      # start the service
      sudo systemctl start postgresql.service
      

      然后你可以访问它

      sudo -u postgresql psql
      

      【讨论】:

        猜你喜欢
        • 2012-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-29
        • 2021-07-08
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多