尝试在我的环境中设置Postgres,但似乎无法获得intidb的权限。

36

我正在跟随最近的RailsCast设置PostgreSQL,但是我无法运行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

你解决了问题吗? - swasheck
4
我有同样的问题......还没有找到解决办法。 - fccoelho
5个回答

83

这应该可以完美地工作:

# 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

使用你的用户名代替 construct。因此,如果你的计算机用户名是 WDurant,则代码将是:

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

8
这句话的意思是将 /usr/local/var/postgres/ 目录的所有权改为当前用户,可以用以下命令完成:sudo chown $(whoami) /usr/local/var/postgres/ - jhrr
1
很抱歉听到@Geuis你遇到了这样的问题。我应该添加一些上下文来表明,我只是想展示sudo chown $(whoami) /usr/local/var/postgres/只是一种以编程方式确定您的用户名的方法,而不必像sudo chown wdurant /usr/local/var/postgres那样手动输入。无论如何,希望你能解决所有问题。祝你好运。 - jhrr
1
感谢@jhrr。很抱歉昨晚留下了不好看的评论。并不是针对你个人的。只是我自己在尝试设置时遇到了很多挫折和沮丧。我已经删除了之前的评论,但我会在这里留下这一部分,以供将来需要的其他人参考。“问题不仅仅在于所有者,还在于目录的权限。没有其他答案指出需要调整目录权限。chmod 755 目录名称” - Geuis
没关系,我们都经历过那个阶段。 - jhrr
使用Homebrew,我按照前三行输入了 brew postinstall postgresql,最终我的问题似乎得到了解决。 - Adam Starrh

22

如果你使用的是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 - Victoria Stuart
2
也许考虑将此内容添加到arch wiki … 我认为权限部分尚未得到解释 - pandita
我按照这些命令操作,但仍然遇到了权限问题。我使用的是非Ubuntu 16.04系统。 - yuqli
你刚刚拯救了我的一天!非常感谢你! - kohane15
你真是救了我一命!非常感谢你! - undefined

7
您需要使用SU命令切换到postgres用户:
  • sudo su - postgres
然后运行以下命令:
  • initdb -E UTF8(我喜欢设置UTF8,因为它非常灵活,并且这将创建所有群集作为UTF8[除非您明确指定其他])
接下来需要创建您的用户(如果尚未创建):
  • $ createuser -s -U postgres
  • $ 输入要添加角色的名称:{{我的登陆名}}(这似乎是 Construct
然后退出postgres用户并创建您自己的数据库:
  • $ createdb

3

你在以哪个用户身份运行initdb?如果你不是root用户,很可能没有权限在/usr/local目录下创建文件夹。我建议以root用户身份创建/usr/local/var/postgres,并将其所有权转让给construct用户:

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

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

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

(FYI:对于这样的 Unix 问题,你可能会发现 Unix.SEAsk Ubuntu 提供更快的答案)


0

现在这应该是至少在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接