关于macos:Postgres用户不存在?

Postgres user does not exist?

我刚刚安装了Postgres,并且已经修补了它和各种配置1-2小时。

我被困在无法改变为postgres用户

$ su - postgres会产生以下错误:su: unknown login: postgres

$ sudo -u postgres psql产生以下错误:sudo: unknown user: postgres

这些尝试是作为普通用户进行的。 以root身份尝试它们具有完全相同的结果。 我在OS X上通过Homebrew安装了postgres,我已多次阅读说明。


psql:使用我的默认用户名登录

psql -U postgres:以postgres用户身份登录

Sudo对我来说似乎不是必需的。

我使用Postgres.app作为我的OS X postgres数据库。它消除了确保安装正常并且数据库服务器正确启动的麻烦。在这里查看:http://postgresapp.com

编辑:感谢@Erwin Brandstetter纠正我对参数的使用。


通过psql --help,当你没有设置数据库名称的选项(没有-d选项)时,它将是你的用户名,如果你没有-U,数据库用户名也是你的用户名,等等。

但是通过initdb(创建第一个数据库)命令,它没有您的用户名作为任何数据库名称。它有一个名为postgres的数据库。初始化数据存储区时,initdb命令始终会创建第一个数据库。这个数据库叫做postgres。

因此,如果您没有另一个名为您的用户名的数据库,则需要使用psql -d postgres for psql命令才能工作。它似乎默认提供-d选项,psql postgres也可以。

如果您已经创建了与用户名相同的其他数据库名称(应该使用createdb完成),那么您可以仅命令psql。并且似乎第一个数据库用户名由brew设置为您的计算机用户名。

1
psql -d <FIRST DATABASE name> -U <FIRST DATABASE USER name>

要么,

1
2
psql -d postgres -U <your machine username>
psql -d postgres

会默认工作。


OS X倾向于在系统帐户名前加上"_";你没有说你正在使用什么版本的OS X,但至少在10.8和10.9中,_postgres用户存在于默认安装中。请注意,您将无法su到此帐户(root用户除外),因为它没有密码。另一方面,sudo -u _postgres应该可以正常工作。


我得到与su - postgressudo -u postgres psql的kryshah完全相同的错误。
DanielM的回答也给出了错误。

设置错误时输出

但是请回答przbabu的评论。

1
2
3
4
5
6
7
masi$ psql
psql: FATAL:  DATABASE"masi" does NOT exist
masi$ psql -U postgres
psql: FATAL:  ROLE"postgres" does NOT exist
masi$ psql postgres
psql (9.4.1)
TYPE"help" FOR help.

我认为这个问题的某些部分可能在OSX的所有者设置中

1
2
3
4
5
6
7
8
masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

但是sudo chown -R postgres:staff /Users/postgres给出了chown: invalid user: ‘postgres:staff’

简而言之,这不是解决问题的方法。
使用postgres安装提供的工具来创建用户和数据库。

获得正确的设置和输出

postgres安装后有一些特定的命令可以将新用户添加到数据库系统。
在initdb之后,按照此处所述运行以下命令

1
2
3
createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

为了始终避免密码请求,您有三个选择,如此处所述。


1
psql -U postgres

在db名称的情况下工作得很好:postgres&amp;用户名:postgres。所以你不需要写sudo。

在其他数据库的情况下,您可以尝试

1
psql -U yourdb postgres

正如Postgres帮助中给出的那样:

1
psql [OPTION]... [DBNAME [USERNAME]]


这里的讨论和答案对我很有帮助:

psql:FATAL:数据库""不存在


解决方案很简单:
以root身份登录
之后:

1
2
3
su - postgres

psql