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