psql: FATAL: role "不存在

我是postgres的新手。

我安装了postgres。我在玩psql命令,我不小心掉了postgres数据库。我不知道里面有什么。

我目前正在制作教程:http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

我被困在sudo -u postgres psql postgres

错误信息:# eyz0

$ which 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和重新安装一切?

谢谢你们的帮助!

628968 次浏览

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

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

请注意,问题中提到的教程并不是以postgres.app为目标编写的。 与一般Unix的PostgreSQL相反,postgres.app试图看起来像一个正常的应用程序,而不是一个由专用的postgres用户运行的服务,该用户具有与普通用户不同的特权。

. postgres.app由您自己的帐户运行和管理

因此,代替这个命令:sudo -u postgres psql -U postgres,它将更符合postgres的精神。psql,它会自动连接到一个与用户名称匹配的数据库,并使用一个同名的db帐户(碰巧是超级用户),因此它可以做任何权限方面的事情。

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

注意,错误消息谈论的是丢失的数据库,它谈论的是丢失的角色。在稍后的登录过程中,它可能还会发现丢失的数据库。

但是第一步是检查缺少的角色:命令\dupsql内的输出是什么?在我的Ubuntu系统中,相关的行是这样的:

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

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

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

sudo -u user psql user

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

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

但自从你毕业后。应用程序设置似乎不这样做,你也不应该这样做。简单调整教程。

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

你可以:

psql

并继续本教程。

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

简要说明:

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

关键是“我安装了postgres。mac版App。”这个应用程序设置本地PostgreSQL安装,使用数据库超级用户,其角色名与您的登录名(简称)相同。

< p >当Postgres。app首先启动,它创建$USER数据库, 当没有指定时,它是PSQL的默认数据库。的

.默认用户为$ user,无密码

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

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

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

这将使那些FATAL:角色postgres不存在消失。

在命令行上运行该命令可以修复它

# EYZ0

对我来说,这个代码是有效的:

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

它来自这里: # EYZ0 < / p >

第一个你需要创建一个用户:

sudo -u postgres createuser --superuser $USER

创建一个数据库:

sudo -u postgres createdb $USER

改变 $USER到您的系统用户名。

你可以看到完整的解决方案这里

MAC:

  1. 安装自酿酒
  2. # EYZ0
  3. # EYZ0
  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

在启动时启动服务器

  • # EYZ0
  • # EYZ0
  • # EYZ0

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

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

查看这个网站更多这样的文章:https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

这是唯一一个帮我解决问题的:

createuser -s -U $USER

为了它的价值,我有ubuntu和许多软件包安装,它去与它冲突。

对我来说,正确答案是:

sudo -i -u postgres-xc
psql

在前一天执行brew services stop postgresql后,我陷入了这个问题。
第二天:brew services start postgresql不起作用。这是因为如使用自制软件安装时所示。Postgresql使用launchd…它会在电脑开机时加载。

分辨率:
brew services start postgresql
重新启动计算机。

createuser postgres --interactive

或者创建一个超级用户postgresl

createuser postgres -s

我需要取消设置$PGUSER:

$ unset PGUSER
$ createuser -s postgres

\du命令返回:

角色名= postgres@implicit_files

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

错误:角色postgres不存在。

但是postgres=# \password postgres@implicit_files运行正常。

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

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

建议—为了安全起见,请备份数据库。

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

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

要解决这个问题,只需使用Postgres附带的createuser实用程序创建一个名为postgres的新用户,选项为--superuser。该实用程序可以在Postgres的bin目录中找到。如。

createuser --superuser postgres

如果您有一个自定义主机名或端口,那么请确保使用设置适当的选项

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

如果你正在使用docker,确保你没有使用POSTGRES_USER=something_else,因为这个变量被标准映像用来知道PostgreSQL管理用户的名称(默认为postgres)。

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

如果你从brew安装了postgres,在你的终端上运行:

/usr/local/opt/postgres/bin/createuser -s postgres

如果你从Brew安装postgres并且使用苹果硅(M1) mac,在你的终端上运行这个:

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

如果你正在使用英特尔(x86) mac,在你的终端上运行这个:

/usr/local/opt/postgres/bin/createuser -s postgres

这个EYZ1帮助我解决了同样的问题。

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

# EYZ0

这对我很有效。

brew install postgresqlbrew services start postgresql之后,我们有一个名为postgres的db。默认情况下,我们可以这样打开psql。

psql postgres

然后我们可以像这样在psql控制台中添加任意名称的用户。

CREATE USER postgres

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

这对我很有效

Createuser -s postgres

注意:我用的是mac catalina

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

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

这将以默认用户postgresuser重新创建数据库

通过homebrew安装了新的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

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

# EYZ0

然后

# EYZ0

您将看到您的postgres用户名。

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

遵循这个:

brew install postgresql
createuser -s postgres
brew services restart postgresql
对于m1芯片和自制版本3.4.9,createuser被移动到特定包的Cellar中。 这对我很有效 # EYZ0 < / p >

对于m1芯片,如果您还没有通过homebrew安装postgresql包,请在终端中安装:

brew install postgre

然后手动创建用户名:

/opt/homebrew/bin/createuser -s <username>

你的错误可能已经解决了;但是如果出现错误

database "databasename"不存在

然后你必须手动创建你的数据库:

/opt/homebrew/bin/createdb -U <username>  <databasename>