无法连接到template1:​​FATAL:角色“_postgres”不存在

时间:2015-05-19 14:21:47

标签: macos postgresql

使用OS X 10.10,安装了postgreSQL和PostGIS here,psql版本9.3.5。我很难让postgreSQL运行。

我尝试在psql和PostGis上关注OSM教程。但这似乎相当困难......我被困here。 他们建议创建用户:

sudo -u postgres createuser christoph

这对我不起作用。我创建了这样的用户:

$ sudo -u _postgres createuser -U postgres christoph

这没有任何问题。然后我尝试了这个:

$ sudo -u _postgres createdb --encoding=UTF8 --owner=christoph gis
> cannot connect to template1: FATAL:  role "_postgres" does not exist

如果我刚刚创建了一个角色,_postgres怎么可能不存在?!

我也不明白为什么

$ createdb mydb
> -bash: createdb: command not found

虽然不起作用 我添加了路径:

$ export PSQL_DIR=/usr/local/pgsql/bin/
$ export PATH="$PSQL_DIR:$PATH"

之前。

执行如下命令:

$ /usr/local/pgsql/bin/createdb mydb
> createdb: cannot create database: ERROR:  permission denied to create database

我与安装了psql的用户进行了对话... 那有联系吗?!

1 个答案:

答案 0 :(得分:3)

很容易将系统用户(存储在/etc/passwd)与 Postgres角色(存储在数据库群集中)混淆。

在第一个命令中,您提到两种类型的用户:

  • sudo -u _postgres表示“使用系统用户_postgres执行以下命令”
  • 命令中的-U postgres表示“连接到具有角色postgres的Postgres群集”

但是,在下一个命令中:

sudo -u _postgres createdb --encoding=UTF8 --owner=christoph gis

您指定相同的sudo -u _postgres,但是缺少实际Postgres命令的-U参数(您说您希望christoph拥有新数据库,但您没有说“我是christoph” “)。

Postgres命令行工具的默认行为是猜测Postgres角色名称与系统用户名相同。由于系统用户名为_postgres(带有前导下划线),而Postgres角色名为postgres(没有前导下划线),因此该假设失败,您无法连接。