我是postgres的新手。
我安装了postgres。我在玩psql命令,我不小心掉了postgres数据库。我不知道里面有什么。
我目前正在制作一个教程:http://www.rosslaird.com/blog/building-a-project-with-mezzanine/
我被困在sudo -u postgres psql postgres
错误信息:psql: FATAL: role "postgres"不存在
$ 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和重新安装一切?
谢谢你们的帮助!
当你使用一个ID不是postgres的用户运行initdb时,没有指定postgres的用户名——username=postgres或-U postgres,就会发生这种情况。
然后,使用用于运行initdb的系统用户帐户创建数据库集群,并赋予其超级用户权限。
要解决这个问题,只需使用postgres附带的createuser实用程序创建一个名为postgres的新用户,选项为——superuser。该实用程序可以在Postgres的bin目录中找到。如。
createuser --superuser postgres
如果您有一个自定义主机名或端口,那么一定要设置适当的选项。
不要忘记删除initdb为您创建的其他用户帐户。
删除postgres数据库并不重要。这个数据库最初是空的,它的目的只是让postgres用户有一个可以连接的“家”(如果需要的话)。
您仍然可以使用SQL命令CREATE DATABASE postgres重新创建它;
注意,问题中提到的教程不是用postgres编写的。应用程序在脑海中。
与一般用于Unix的PostgreSQL相反,postgres。App试图看起来像一个正常的应用程序,而不是一个由专用的postgres用户运行的服务,该用户拥有与普通用户不同的特权。postgres。应用程序由您自己的帐户运行和管理。
因此,与其这样的命令:sudo -u postgres psql -u postgres,它将更符合postgres的精神。psql,它自动连接到与用户名称匹配的数据库,并使用同名的db帐户(碰巧是超级用户),因此它可以做任何权限方面的事情。
上下文
我添加了一个我在这里没有看到的情况的答案,这是一个边缘情况,如果您在同一台机器上有多个用户,并且试图使用postgres服务的用户不是在该机器上安装postgres的用户。
我所尝试过的
在其他类似的命令中,这些命令对我来说都失败了:
createuser -s [your username]
# createuser: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "[your username]" does not exist
createuser -s postgres
# createuser: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "[your username]" does not exist
sudo -u postgres createuser --superuser [your username]
# sudo: unknown user: postgres
# sudo: error initializing audit plugin sudoers_audit
psql -U postgres
# psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "postgres" does not exist
原因
原因是postgres角色和[你的用户名](也就是你的命令行中的whoami)都不在postgres中。
解决方案
在这种极端情况下,我必须首先登录安装postgres的用户:
sudo su - [username that installed postgres]
然后为我的新用户创建一个角色:
createuser -s [your username]