32

我正在关注最近关于设置 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
4

5 回答 5

71

这应该可以正常工作:

# 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
于 2013-03-10T08:05:30.207 回答
16

如果您在 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
于 2016-11-04T04:28:46.370 回答
6

您实际上需要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
于 2012-05-03T17:48:16.133 回答
3

您以哪个用户身份运行 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提供更快的答案)

于 2012-05-03T17:40:32.650 回答
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
于 2020-12-15T23:29:21.223 回答