我是postgres新手。
我安装了postgres.app for mac。我正在玩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相关的所有内容并重新安装所有内容?
感谢帮助人员!
答案 0 :(得分:296)
请注意,错误消息 NOT 谈论丢失的数据库,它会讨论缺少的角色。稍后在登录过程中,它可能会偶然发现丢失的数据库。
但第一步是检查缺少的角色:命令psql
的{{1}}内的输出是什么?在我的Ubuntu系统上,相关的行看起来像这样:
\du
如果 List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
没有至少一个角色,那么您有问题:-)
如果有,您可以使用它登录。并查看superuser
命令的输出:\l
和user
数据库上template0
的权限与我的Ubuntu系统上超级用户{{1}的权限相同}}。所以我认为您的设置简单使用template1
作为超级用户。所以你可以尝试这个命令登录:
postgres
如果user
确实是数据库超级用户,您可以为他创建另一个数据库超级用户和一个私有的空数据库:
sudo -u user psql user
但是,由于你的postgres.app设置似乎没有这样做,你也不应该这样做。简单地适应教程。
答案 1 :(得分:237)
关键是“我安装了postgres.app for mac。” This application使用数据库超级用户设置本地PostgreSQL安装,其角色名称与您的登录(短)名称相同。
当Postgres.app首次启动时,它会创建$ USER数据库, 当没有指定时,这是psql的默认数据库。该 默认用户是$ USER,没有密码。
某些脚本(例如,在Linux系统上使用pgdump
创建的数据库备份)和教程将假定超级用户具有传统角色名称postgres
。
您可以通过一次性使本地安装看起来更传统并避免这些问题:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
这将使那些致命:角色“postgres”不存在消失。
答案 2 :(得分:186)
对于MAC:
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
或/usr/local/opt/postgres/bin/createuser -s 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
答案 3 :(得分:27)
createuser postgres --interactive
或使用
制作超级用户postgreslcreateuser postgres -s
答案 4 :(得分:15)
对我来说,这段代码有效:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
它来自这里: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
答案 5 :(得分:12)
首先您需要创建一个用户:
sudo -u postgres createuser --superuser $USER
后,您创建了一个数据库:
sudo -u postgres createdb $USER
将 $USER
更改为您的系统用户名。
您可以看到完整的解决方案here。
答案 6 :(得分:10)
我需要取消设置$PGUSER
:
$ unset PGUSER
$ createuser -s postgres
答案 7 :(得分:9)
如果从brew安装了postgres,请在终端中运行它:
/usr/local/opt/postgres/bin/createuser -s postgres
答案 8 :(得分:7)
在命令行上运行它应该修复它
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
答案 9 :(得分:5)
如果您从 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
答案 10 :(得分:5)
如果您以其ID不是initdb
的用户身份运行postgres
,而没有用postgres
或--username=postgres
指定-U postgres
用户名,则会发生这种情况。
然后使用您用于运行initdb的系统用户帐户创建数据库集群,并为其赋予超级用户权限。
要修复此问题,只需使用Postgres随附的postgres
实用工具创建一个新的--superuser
用户,并使用选项createuser
。该实用程序可以在Postgres的bin
目录中找到。例如
createuser --superuser postgres
如果您有自定义的主机名或端口,请确保使用set the appropriate options。
别忘了删除initdb为您创建的其他用户帐户。
答案 11 :(得分:4)
删除postgres
数据库并不重要。这个数据库最初是空的,它的目的只是让postgres
用户有一种“家”连接,如果需要的话。
仍然可以使用SQL命令CREATE DATABASE postgres;
请注意,问题中提到的教程并未考虑postgres.app
。
与一般的PostgreSQL for Unix相反,postgres.app
尝试看起来像普通应用程序,而不是由具有与普通用户不同权限的专用postgres
用户运行的服务。 postgres.app
由您自己的帐户运行和管理。
因此,而不是这个命令:sudo -u postgres psql -U postgres
,只需发出:psql
,它就会更加符合postgres.app的精神,它会自动连接到与您的用户名相匹配的数据库,并且恰好是超级用户的同名的db帐户,因此它可以以权限方式执行任何操作。
答案 12 :(得分:4)
如果您使用的是docker,请确保您未使用POSTGRES_USER=something_else
,因为标准映像使用此变量来知道PostgreSQL管理员用户的名称(默认为postgres
)
在我的情况下,我使用此变量的目的是将另一个用户设置到我的特定数据库中,但最终还是改变了主要的PostgreSQL用户。
答案 13 :(得分:3)
对于它的价值,我安装了ubuntu和许多软件包,并且与它发生了冲突。
对我来说,正确答案是:
sudo -i -u postgres-xc
psql
答案 14 :(得分:3)
这个article帮助我解决了同样的问题psql: FATAL: role “postgres” does not exist
。
我使用的是 mac,所以我在终端中输入了这个命令:
createuser -s postgres
它对我有用。
答案 15 :(得分:1)
这是唯一一个为我修复它的人:
createuser -s -U $USER
答案 16 :(得分:1)
在Ubuntu系统上,我清除了PostgreSQL并重新安装了它。恢复所有数据库。 这为我解决了问题。
建议-将数据库备份放在更安全的一侧。
答案 17 :(得分:0)
我们在 postgres
和 brew install postgresql
之后有一个名为 brew services start postgresql
的数据库。这样我们就可以默认这样打开psql了。
psql postgres
然后我们可以在该 psql 控制台中添加具有任何名称的用户。
CREATE USER postgres
如果我们想要超级用户,那么我们可以在末尾添加 SUPERUSER
。
答案 18 :(得分:0)
\du
命令返回:
角色名称=
postgres@implicit_files
该命令postgres=# \password postgres
返回错误:
错误:角色“ postgres”不存在。
但是postgres=# \password postgres@implicit_files
运行正常。
在sudo -u postgres createuser -s postgres
之后,第一个变体也有效。
答案 19 :(得分:0)
我在前一天执行brew services stop postgresql
时遇到了这个问题。
第二天:brew services start postgresql
不起作用。这是因为如使用自制软件安装时所示。 postgresql使用launchd ...在计算机开机时加载。
决议:
brew services start postgresql
重新启动计算机。
答案 20 :(得分:0)
我不认为这里需要sudo,因为psql -l返回数据库列表。这告诉我initdb是在用户的当前用户下运行的,而不是在postgres用户下运行。
你可以:
psql
继续本教程。
我建议A.H关于创建postgres用户和数据库的一般要点,因为许多应用程序可能会期望它存在。
简要说明:
PostgreSQL不会以对操作系统的管理访问权限运行。相反,它与普通用户一起运行,并且为了支持对等身份验证(询问尝试连接的操作系统),它会与运行初始化过程的用户一起创建用户和数据库。在这种情况下,它是您的普通用户。