我是Postgres的新手。
我为Mac安装了postgres.app。我在玩psql命令,不小心掉了postgres数据库。我不知道里面是什么。
我目前正在学习一个教程:http://www.rosslaird.com/blog/building-a-project-with-mezzanine/
我被困在EDOCX1[0]
错误消息:psql: FATAL: role"postgres" does not exist。
$PSQL
1
| /Applications/Postgres.app/Contents/MacOS/bin/psql |
这是从psql -l打印出来的。
1 2 3 4 5 6 7 8 9
| 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相关的所有内容并重新安装所有内容?
谢谢你们的帮助!
- 正在重新启动计算机。确保执行从brew services start postresql启动。
请注意,错误消息不会讨论缺少的数据库,它会讨论缺少的角色。在稍后的登录过程中,它还可能会因丢失的数据库而绊倒。
但第一步是检查缺少的角色:命令\du的psql中的输出是什么?在我的Ubuntu系统上,相关行如下:
1 2 3 4
| List OF roles
ROLE name | Attributes | Member OF
-----------+-----------------------------------+-----------
postgres | Superuser, CREATE ROLE, CREATE DB | {} |
如果superuser中没有至少一个角色,那么您会遇到一个问题:—)
如果有,可以使用它登录。看看你的\l命令的输出:user对template0和template1数据库的权限与我的Ubuntu系统对超级用户postgres的权限相同。所以我认为您的设置simple使用user作为超级用户。因此,您可以尝试使用此命令登录:
如果user确实是db超级用户,您可以为他创建另一个db超级用户和一个私有的空数据库:
1 2
| CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres; |
但由于postgres.app的设置似乎没有这样做,所以您也不应该这样做。简单调整教程。
- 对我来说,用户不是被创建的,而是使用Postgresv10的CREATE USER postgres WITH SUPERUSER PASSWORD 'password';am。
- 如果您从homebrew安装了postgres,那么您需要在终端中运行/usr/local/opt/postgres/bin/createuser -s postgres
关键是"我为Mac安装了postgres.app"。这个应用程序使用与您的登录名(简称)相同的数据库超级用户设置本地postgresql安装。
When Postgres.app first starts up, it creates the $USER database,
which is the default database for psql when none is specified. The
default user is $USER, with no password.
一些脚本(例如,在Linux系统上使用pgdump创建的数据库备份)和教程将假定超级用户具有传统的postgres角色名。
您可以让本地安装看起来更传统一些,并通过一次性操作避免这些问题:
1
| /Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres |
这将使这些致命:角色"postgres"并不存在。
- 那个以东的命令对我有用。谢谢!
- 我刚刚安装了MacOSXMavericks。我使用postgres.app和navicat来浏览数据库。获取致命角色不存在错误。你的小费完全解决了这个问题。避免偏头痛。2 +为您!谢谢。
- 如果您使用的是来自自制的Postgres,那么您需要/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(显然是9.2.4版)。
- 对于postgres.app 9.3,他们似乎重新安排了目录。我尝试了/applications/postgres.app/contents/versions/9.3/bin/createu‌&8203;ser-s postgres,但这生成了相同的eror消息:"createuser:could not connect to database postgres:fatal:role"postgres"does not exist"
- 埃多克斯一〔8〕为我正确地跑了。
- 唯一对我有用的是遵循以下步骤:mikeball.us/blog/setting-up-postgres-with-homebrew,然后按照您的建议运行createuser-s postgres。谢谢!我花了一整天的时间才把它弄好。
- 对于9.4.1.0,我没有看到createuser命令。然而,正如另一条评论所说,它确实创建了一个用户,它只是以您的用户名命名的。因此,如果您试图打开psql,那么复制终端中的命令并添加--user $USER,它将打开。然后您可以运行命令create user postgres with superuser。
- 我放弃了这个应用程序,去尝试BREW
- "createuser-s postgres"为我工作。谢谢
- 要获得pg的版本,请在终端中运行psql --version。stackoverflow.com/questions/13733719/……这有助于确定您使用的自制版本
- 不要安装postgres.app,如果你试图离开,它会把事情搞混。
- @罗杰利普斯康姆,谢谢你的工作完美!!
- @rogerlipscombe如果安装后运行brew link postgresql,不需要将整个路径附加到createuser,一个简单的createuser -s postgres将非常有用。
- 这应该是选定的答案。为我工作。
- 干得好,谢谢
- 谢谢兄弟:1:
- 埃多克斯一〔14〕为我工作。我用自制啤酒安装了Postgres
对于Mac:
安装自制
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql//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 for gui。
默认情况下,用户postgres将没有任何登录密码。
查看此网站以获取更多类似的文章:https://medium.com/@nithanaroy/installing-postgres-on-mac-18f017c5d3f7
- 这是一个很好的观点。感谢您的投入。
- 使用最新的BREW安装,您可以执行brew services start postgresql以启动Postgres。
- 不是每个英雄都穿斗篷。爱你男人3
- 这个解决方案对我有效。非常感谢。
- <3<3<3<3<3<3<3<3
1
| createuser postgres --interactive |
或者让超级用户只使用
- cool stackoverflow.com/questions/17633422/&hellip;
- 我发现这个答案很有用,当我的pgadmin不断要求postgres用户,我没有postgres角色开始,这个命令创建了它,我把自动生成的pw添加到我的pgadmin中,问题解决了!
对我来说,这段代码是有效的:
1
| /Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres |
它来自这里:http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
- 也为我工作!你救了我的培根。
- 我得到的角色"我"不存在
首先,您需要创建一个用户:
1
| sudo -u postgres createuser --superuser $USER |
创建数据库后:
1
| sudo -u postgres createdb $USER |
将$USER更改为系统用户名。
您可以在这里看到完整的解决方案。
我需要解除$PGUSER号决议:
1 2
| $ unset PGUSER
$ createuser -s postgres |
在命令行上运行这个应该可以修复它
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb
- 要求:postgresapp.com
- 这是唯一对我有用的东西。谢谢您!
删除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自动连接到一个与您的用户名相匹配的数据库,以及一个与超级用户同名的db帐户,这样它就可以做任何有权限的事情。
- 可以。但是,当我试图删除用户数据库时,为什么我会得到一个错误ERROR: cannot drop the currently open database?那么使用这个postgres.app不是一个好的实践吗?
- 连接数据库时不能删除它。你为什么要删除它呢?这是为了你的方便。
- 我只是想看看我能不能。所以当我启动psql和postgres.app的时候,它就像一个默认的正确数据库?那么访问权限呢?我不能再设置它们了?我看到template0和template1有访问权限
- @user805981 Postgres.app是用于测试和开发的;它是Heroku的PostgreSQL包,旨在使Mac用户使用Ruby on Rails开发时更容易使用PostgreSQL而不是默认的sqlite进行测试。Rails的使用倾向于使用sqlite进行测试并部署到PostgreSQL,这导致了各种各样的问题,所以Heroku也试图使PostgreSQL上的测试变得更容易。Postgres.app可以用于测试,但我不会考虑将其用于生产或实际数据,这并不是它的用途。
就其价值而言,我安装了Ubuntu和许多软件包,并且与之发生冲突。
对我来说,正确的答案是:
1 2
| sudo -i -u postgres-xc
psql |
当您使用ID不是postgres的用户运行initdb时,如果没有使用--username=postgres或-U postgres指定postgres用户名,就会发生这种情况。
然后使用您用于运行initdb的系统用户帐户创建数据库集群,并授予超级用户权限。
要修复它,只需使用postgres附带的createuser实用程序创建一个名为postgres的新用户,并使用选项--superuser。该实用程序可以在postgres'bin目录中找到。例如
1
| createuser --superuser postgres |
如果您有一个自定义的主机名或端口,那么一定要设置适当的选项。
不要忘记删除initdb为您创建的其他用户帐户。
在Ubuntu系统上,我清除了PostgreSQL并重新安装了它。所有数据库都已还原。这为我解决了问题。
建议-备份数据库以使其更安全。
这是唯一一个为我修复的:
- 这使当前用户成为系统超级用户,而不仅仅是Postgres超级用户。我想说这通常是个坏主意,因为它避开了通常的安全策略。您应该使用sudo获得临时超级用户特权。
在前一天执行了brew services stop postgresql后,我在这个问题上陷入了困境。第二天:江户十一〔11〕不工作。这是因为如使用自制程序安装时所示。PostgreSQL使用一个launchd…当您的计算机开机时加载。解决方法:brew services start postgresql重新启动计算机。
\du命令返回:
Role name = postgres@implicit_files
命令postgres=# \password postgres返回错误:
ERROR: role"postgres" does not exist.
但江户十一〔十六〕行得很好。
同样在sudo -u postgres createuser -s postgres之后,第一个变体也起作用。
我不认为这里需要sudo,因为psql-l返回数据库列表。这说明initdb是在用户的当前用户下运行的,而不是在postgres用户下运行的。
你可以:
继续本教程。
我建议A.H创建postgres用户和db的一般要点,因为许多应用程序可能希望它存在。
简要说明:
PostgreSQL不会以对操作系统的管理权限运行。相反,它与普通用户一起运行,为了支持对等身份验证(询问试图连接的操作系统),它与运行初始化过程的用户创建一个用户和数据库。在本例中,它是您的普通用户。