我是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
$ ps 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相关的所有内容并重新安装所有内容?
谢谢你的帮助!
16 回答
\du
命令返回:那个命令
postgres=# \password postgres
返回错误:但那
postgres=# \password postgres@implicit_files
运行正常 .在
sudo -u postgres createuser -s postgres
之后,第一个变体也起作用 .如果您使用ID不是
postgres
的用户运行initdb
,并且未使用--username=postgres
(或-U postgres
)选项指定用户名,则会发生这种情况 .然后使用您用于运行initdb的用户帐户创建数据库集群,并为其授予超级用户权限 .
要修复它,只需使用Postgres附带的
createuser
实用程序创建一个名为postgres
的新用户,并且可以在bin
目录中找到 . 例如 .如果您有自定义主机名或端口,请务必set the appropriate options .
不要忘记删除initdb为您创建的其他用户帐户 .
我不认为这里需要sudo,因为psql -l返回数据库列表 . 这告诉我initdb是在用户的当前用户下运行的,而不是在postgres用户下运行的 .
你可以:
继续本教程 .
我建议A.H的创建postgres用户和数据库的一般要点,因为许多应用程序可能期望它存在 .
简要说明:
PostgreSQL不会以对操作系统的管理访问权限运行 . 相反,它与普通用户一起运行,并且为了支持对等身份验证(询问尝试连接的操作系统),它会与运行初始化过程的用户一起创建用户和数据库 . 在这种情况下,它是您的普通用户 .
我在前一天执行了
brew services stop postgresql
时遇到了这个问题 .下一天:
brew services start postgresql
无效 . 这是因为如使用自制软件安装时所示 . postgresql使用launchd ...在计算机开机时加载 .解析度:
brew services start postgresql
重启你的电脑 .
请注意,错误消息确实是 NOT 谈论丢失的数据库,它讨论了缺少的角色 . 稍后在登录过程中,它可能会偶然发现丢失的数据库 .
但第一步是检查缺少的角色:命令
\du
的psql
中的输出是什么?在我的Ubuntu系统上,相关的行看起来像这样:如果
superuser
没有至少一个角色,那么你有一个问题:-)如果有,您可以使用它登录 . 并查看
\l
命令的输出:template0
和template1
数据库上user
的权限与我的Ubuntu系统上的超级用户postgres
相同 . 所以我认为你的设置简单使用user
作为超级用户 . 所以你可以尝试这个命令登录:如果
user
确实是数据库超级用户,则可以为他创建另一个数据库超级用户和一个私有的空数据库:但是,由于你的postgres.app设置似乎没有这样做,你也不应该这样做 . 简单地适应教程 .
关键是"I installed the postgres.app for mac." This application使用数据库超级用户设置本地PostgreSQL安装,其角色名称与您的登录(短)名称相同 .
某些脚本(例如,在Linux系统上使用
pgdump
创建的数据库备份)和教程将假定超级用户具有postgres
的传统角色名称 .您可以通过一次性使本地安装看起来更传统并避免这些问题:
这将使那些 FATAL: role "postgres" does not exist 消失 .
对于MAC:
安装Homebrew
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
将使用最新版本 .手动启动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
或者只是用超级用户postgresl
对我来说,这段代码有效:
它来自这里:http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
First 您需要创建一个用户:
After 您创建了一个数据库:
Change
$USER
到您的系统用户名 .您可以看到完整的解决方案here .
我需要取消
$PGUSER
:在命令行上运行它应该修复它
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
删除
postgres
数据库并不重要 . 这个数据库最初是空的,它的目的只是让postgres
用户有一种"home"连接,如果需要的话 .您仍然可以使用SQL命令
CREATE DATABASE postgres;
重新创建它请注意,问题中提到的教程不是用
postgres.app
编写的 . 与一般的PostgreSQL for Unix相反,postgres.app
试图看起来像普通应用程序,而不是由具有与普通用户不同权限的专用postgres
用户运行的服务 .postgres.app
由您自己的帐户运行和管理 .因此,而不是这个命令:
sudo -u postgres psql -U postgres
,它将更加符合postgres.app的精神:psql
,它会自动连接到与您的用户名相匹配的数据库,以及恰好是超级用户的同名数据库帐户,所以它可以做任何权限 .对于它的 Value ,我有ubuntu和许多软件包安装,它与它发生冲突 .
对我来说,正确的答案是:
这是唯一一个为我修复它的人:
在Ubuntu系统上,我清除了PostgreSQL和重新安装它 . 所有数据库都已恢复 . 这解决了我的问题 .
建议 - 将数据库备份放在更安全的一边 .