578

我是postgres新手。

我为 mac 安装了 postgres.app。我在玩 psql 命令时不小心删除了 postgres 数据库。我不知道里面有什么。

我目前正在编写一个教程:http ://www.rosslaird.com/blog/building-a-project-with-mezzanine/

我被困在sudo -u postgres psql postgres

错误信息:psql: FATAL: role "postgres" does not exist

$哪个psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

这是打印出来的psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

那么我应该采取哪些步骤?删除与 psql 相关的所有内容并重新安装所有内容?

谢谢你们的帮助!

4

26 回答 26

563

注意:如果您使用自制软件安装了 postgres,请参阅下面 @user3402754 的评论。

请注意,错误消息不是关于缺少数据库的,而是关于缺少角色的。在登录过程的后期,它也可能偶然发现丢失的数据库。

但第一步是检查缺失的角色:psql命令的输出是什么\du?在我的 Ubuntu 系统上,相关行如下所示:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

如果没有至少一个角色superuser,那么你有问题:-)

如果有,您可以使用它来登录。并查看命令的输出:和数据库\l的权限与我的 Ubuntu 系统user上超级用户的权限相同。因此,我认为您的设置简单用作超级用户。所以你可以试试这个命令登录:template0template1postgresuser

sudo -u user psql user

如果user真的是 DB 超级用户,您可以为他创建另一个 DB 超级用户和一个私有的空数据库:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

但是由于您的 postgres.app 设置似乎没有这样做,所以您也不应该这样做。简单地调整教程。

于 2013-03-09T10:13:04.797 回答
287

关键是“我为 mac 安装了 postgres.app”。此应用程序使用角色名称与您的登录(短)名称相同的数据库超级用户设置本地 PostgreSQL 安装。

当 Postgres.app 首次启动时,它会创建 $USER 数据库,当没有指定时,它是 psql 的默认数据库。默认用户是 $USER,没有密码。

pgdump一些脚本(例如,在 Linux 系统上创建的数据库备份)和教程将假定超级用户具有传统角色名称postgres.

你可以让你的本地安装看起来更传统一些,并通过一次性避免这些问题:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

这将使那些致命的:角色“postgres”不存在消失。

于 2013-07-23T14:25:11.163 回答
286

对于 MAC:

  1. 安装自制软件
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres或者/usr/local/opt/postgres/bin/createuser -s postgres只使用最新版本。
  5. 手动启动 postgres 服务器:pg_ctl -D /usr/local/var/postgres start

在启动时启动服务器

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

现在,它已设置,psql -U postgres -h localhost使用 PgAdmin 登录或使用 GUI。

默认情况下,用户postgres不会有任何登录密码。

查看此站点以获取更多类似的文章:https ://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

于 2016-02-10T06:19:54.773 回答
70
createuser postgres --interactive

或仅使用以下命令创建超级用户 postgresl

createuser postgres -s
于 2017-08-10T20:10:51.773 回答
47

当您initdb使用 ID 不是 的用户运行时,会发生这种情况,而没有使用orpostgres指定postgres用户名。--username=postgres-U postgres

然后使用您用于运行 initdb 的系统用户帐户创建数据库集群,并为其授予超级用户权限。

要修复它,只需使用Postgres 附带的实用程序创建一个postgres以该选项命名的新用户。该实用程序可以在 Postgres 的目录中找到。例如--superusercreateuserbin

createuser --superuser postgres

如果您有自定义主机名或端口,请务必设置适当的选项

不要忘记删除由 initdb 为您创建的其他用户帐户。

于 2019-03-20T21:11:10.147 回答
45

如果您从 brew 安装了 postgres,请在终端中运行它:

/usr/local/opt/postgres/bin/createuser -s postgres
于 2020-08-10T12:50:37.820 回答
21

首先你需要创建一个用户:

sudo -u postgres createuser --superuser $USER

创建数据库后:

sudo -u postgres createdb $USER

更改 $USER为您的系统用户名。

您可以在此处查看完整的解决方案。

于 2015-07-29T22:54:07.147 回答
19

我需要取消设置$PGUSER

$ unset PGUSER
$ createuser -s postgres
于 2018-01-02T06:54:28.480 回答
18

对我来说,这段代码有效:

/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres

它来自这里: http ://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

于 2015-05-06T20:09:37.357 回答
12

如果您从 Brew 安装了 postgres 并且使用的是Apple Silicon (M1) mac,请在终端中运行:

/opt/homebrew/opt/postgresql/bin/createuser -s postgres

如果您使用的是Intel (x86) mac,请在终端中运行:

/usr/local/opt/postgres/bin/createuser -s postgres
于 2021-05-03T12:27:55.977 回答
11

如果您在 2022 年来到这里,想知道在最新的 macOS (macOS Monterey) 上使用最新的 Postgres 有什么用

按照这个:

brew install postgresql
createuser -s postgres
brew services restart postgresql
于 2022-02-01T13:46:44.697 回答
9

在命令行上运行它应该修复它

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

于 2015-02-13T21:41:52.393 回答
8

这篇文章帮助我解决了同样的问题psql: FATAL: role “postgres” does not exist

我使用的是mac,所以我在终端输入了这个命令:

createuser -s postgres

它对我有用。

于 2021-05-12T16:03:49.003 回答
8

这对我有用

createuser -s postgres

注意:我使用的是 mac catalina

于 2021-10-14T04:38:17.427 回答
7

如果您使用的是 docker,请确保您没有使用POSTGRES_USER=something_else,因为标准映像使用此变量来了解 PostgreSQL 管理员用户的名称(默认为postgres)。

在我的例子中,我使用这个变量的目的是为我的特定数据库设置另一个用户,但它最终当然改变了主要的 PostgreSQL 用户。

于 2020-07-23T09:30:30.827 回答
5

这是唯一为我修复它的:

createuser -s -U $USER
于 2016-03-02T00:10:20.950 回答
5

我们有一个以 and 命名的postgres数据库。所以我们可以默认这样打开psql。brew install postgresqlbrew services start postgresql

psql postgres

然后我们可以在那个 psql 控制台中添加任何名称的用户。

CREATE USER postgres

如果我们想要一个超级用户,那么我们可以SUPERUSER在最后添加。

于 2021-07-28T01:02:27.627 回答
4

删除postgres数据库并不重要。这个数据库最初是空的,它的目的只是让postgres用户有一个“家”来连接,如果需要的话。

您仍然可以使用 SQL 命令重新创建它CREATE DATABASE postgres;

请注意,问题中提到的教程并未postgres.app考虑到编写。与一般的 PostgreSQL for Unix 相反,它postgres.app试图看起来像一个普通的应用程序,而不是一个由postgres具有与普通用户不同权限的专用用户运行的服务。postgres.app由您自己的帐户运行和管理。

因此,而不是这个命令:sudo -u postgres psql -U postgres,它会更符合 postgres.app 的精神,只是发出:psql,它会自动连接到与您的用户名匹配的数据库,并使用恰好是超级用户的同名数据库帐户,所以它可以在权限方面做任何事情。

于 2013-03-08T20:53:25.320 回答
4

对于它的价值,我安装了 ubuntu 和许多软件包,但它与它发生冲突。

对我来说,正确的答案是:

sudo -i -u postgres-xc
psql
于 2017-01-11T15:37:40.393 回答
2

如果您在运行 docker 容器后立即遇到此问题,请尝试销毁容器并重新创建它。这为我解决了它:

docker-compose down
docker-compose up --force-recreate

这应该postgresuser以默认用户身份重新创建数据库

于 2021-10-27T07:16:12.157 回答
2

通过自制软件安装了新的 mac (M1) 和最新的 postgres (14.0),对此主题没有任何帮助,但我只是重新安装了 postgres,它有所帮助:

brew services stop postgresql
rm -rf /opt/homebrew/var/postgres/*
brew reinstall postgresql
initdb --locale=C -E UTF-8 /opt/homebrew/var/postgres
brew services restart postgresql

所以,这是一个奇迹或类似的东西......

然后只是:

psql -d postgres
于 2021-11-05T08:37:59.990 回答
2

我今天遇到了类似的问题,实际上我不确定用户名是什么。这是两件事,如果您在企业下并且没有系统管理员访问权限,postgres则会将您的企业用户名创建为postgres管理员用户名。如果你通过Homebrew它安装肯定会发生。在这种情况下,只需使用 brew 运行您的 psql 服务并回显用户名

brew services start postgresql

然后

echo $USER

您将看到 postgres 用户的用户名。

于 2021-11-25T16:42:17.833 回答
1

我认为这里不需要 sudo,因为 psql -l 返回数据库列表。这告诉我 initdb 在用户的当前用户下运行,而不是在 postgres 用户下运行。

你可以:

psql

并继续教程。

我建议 AH 创建 postgres 用户和数据库的一般要点,因为许多应用程序可能期望这存在。

简要说明:

PostgreSQL 不会以对操作系统的管理权限运行。相反,它与普通用户一起运行,并且为了支持对等身份验证(询问正在尝试连接的操作系统),它创建一个用户和运行初始化过程的用户的数据库。在这种情况下,它是您的普通用户。

于 2013-03-09T14:36:59.037 回答
1

在 Ubuntu 系统上,我清除了 PostgreSQL 并重新安装它。所有数据库都已恢复。这为我解决了这个问题。

建议 - 备份数据库以确保安全。

于 2018-11-20T05:52:45.900 回答
0

brew services stop postgresql我在前一天执行后陷入了这个问题。
第二天:brew services start postgresql不会工作。这是因为如您使用自制软件安装时所示。postgresql 使用 launchd ... 在您的计算机开机时加载。

解决方法:
brew services start postgresql
重新启动计算机。

于 2017-06-26T12:33:53.643 回答
0

\du命令返回:

角色名称 =postgres@implicit_files

该命令postgres=# \password postgres返回错误:

错误:角色“postgres”不存在。

但这postgres=# \password postgres@implicit_files运行良好。

同样在 sudo -u postgres createuser -s postgres第一个变体之后也可以工作。

于 2018-06-28T08:32:14.127 回答