我是postgres新手。
我为 mac 安装了 postgres.app。我在玩 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 相关的所有内容并重新安装所有内容?
谢谢你们的帮助!
brew services start postresql
执行 Launchd。
whoami
找出您的用户名。请改用此用户名登录。
注意:如果您使用自制软件安装了 postgres,请参阅下面 @user3402754 的评论。
请注意,错误消息不是关于缺少数据库的,而是关于缺少角色的。在登录过程的后期,它也可能偶然发现丢失的数据库。
但第一步是检查缺少的角色:命令 \du
的 psql
内的输出是什么?在我的 Ubuntu 系统上,相关行如下所示:
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
如果 superuser
中没有至少一个角色,那么您有问题 :-)
如果有,您可以使用它来登录。查看 \l
命令的输出:template0
和 template1
数据库上的 user
权限与超级用户 postgres
在我的 Ubuntu 系统上的权限相同。所以我认为您的设置很简单,使用 user
作为超级用户。所以你可以试试这个命令登录:
sudo -u user psql user
如果 user
确实是 DB 超级用户,您可以为他创建另一个 DB 超级用户和一个私有的空数据库:
CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;
但是由于您的 postgres.app 设置似乎没有这样做,所以您也不应该这样做。简单地调整教程。
对于 MAC:
安装 Homebrew brew install postgres initdb /usr/local/var/postgres /usr/local/Cellar/postgresql/
在启动时启动服务器
mkdir -p ~/Library/LaunchAgents
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl 加载 ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
现在,它已设置好,使用 psql -U postgres -h localhost
登录或使用 PgAdmin 进行 GUI。
默认情况下,用户 postgres
没有任何登录密码。
查看此站点以获取更多类似的文章:https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
brew services start postgresql
来启动 postgres
/usr/local/opt/postgresql@<version>/bin/createuser -s postgres
关键是“我为 mac 安装了 postgres.app”。 This application 使用角色名称与您的登录(短)名称相同的数据库超级用户设置本地 PostgreSQL 安装。
当 Postgres.app 首次启动时,它会创建 $USER 数据库,当没有指定时,它是 psql 的默认数据库。默认用户是 $USER,没有密码。
一些脚本(例如,在 Linux 系统上使用 pgdump
创建的数据库备份)和教程将假定超级用户具有传统的角色名称 postgres
。
你可以让你的本地安装看起来更传统一些,并通过一次性避免这些问题:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
这将使那些致命的:角色“postgres”不存在消失。
/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres
(显然是 9.2.4 版)。
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres
对我来说运行正确。
brew link postgresql
,则无需将整个路径附加到 createuser
,一个简单的 createuser -s postgres
就可以了
createuser -s postgres
为我工作。我用 Homebrew 安装了 postgres
createuser postgres --interactive
或仅使用以下命令创建超级用户 postgresl
createuser postgres -s
当您使用 ID 不是 postgres
的用户运行 initdb
时会发生这种情况,而没有使用 --username=postgres
或 -U postgres
指定 postgres
用户名。
然后使用您用于运行 initdb 的系统用户帐户创建数据库集群,并为其授予超级用户权限。
要修复它,只需使用 Postgres 附带的 createuser
实用程序创建一个名为 postgres
的新用户,并使用选项 --superuser
。该实用程序可以在 Postgres 的 bin
目录中找到。例如
createuser --superuser postgres
如果您有自定义主机名或端口,请务必选择 set the appropriate options。
不要忘记删除由 initdb 为您创建的其他用户帐户。
如果您从 brew 安装了 postgres,请在终端中运行它:
/usr/local/opt/postgres/bin/createuser -s postgres
如果您在 2022 年来到这里,想知道在最新的 macOS (macOS Monterey) 上使用最新的 Postgres 有什么用
按照这个:
brew install postgresql
createuser -s postgres
brew services restart postgresql
首先你需要创建一个用户:
sudo -u postgres createuser --superuser $USER
创建数据库后:
sudo -u postgres createdb $USER
更改 $USER
为您的系统用户名。
您可以看到完整的解决方案here。
我需要取消设置 $PGUSER
:
$ unset PGUSER
$ createuser -s postgres
对我来说,这段代码有效:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
它来自这里:http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
如果您从 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
在命令行上运行它应该修复它
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
这对我有用
createuser -s postgres
注意:我使用的是 mac catalina
这个article帮助我解决了同样的问题psql: FATAL: role “postgres” does not exist
。
我使用的是mac,所以我在终端输入了这个命令:
createuser -s postgres
它对我有用。
如果您使用 docker,请确保您没有使用 POSTGRES_USER=something_else
,因为标准映像使用此变量来了解 PostgreSQL 管理员用户的名称(默认为 postgres
)。
在我的例子中,我使用这个变量的目的是为我的特定数据库设置另一个用户,但它最终当然改变了主要的 PostgreSQL 用户。
我们在 brew install postgresql
和 brew services start postgresql
之后有一个名为 postgres
的数据库。所以我们可以默认这样打开psql。
psql postgres
然后我们可以在那个 psql 控制台中添加任何名称的用户。
CREATE USER postgres
如果我们想要一个超级用户,那么我们可以在末尾添加 SUPERUSER
。
删除 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 不是一个好习惯吗?
Postgres.app
用于测试和开发目的;它是 Heroku 的一个 PostgreSQL 包,旨在让使用 Ruby on Rails 开发的 Mac 用户更容易使用 PostgreSQL 而不是默认的 SQLite 进行测试。 Rails 使用倾向于使用 SQLite 进行测试并部署到 PostgreSQL,这会导致各种问题,因此 Heroku 也试图使其更容易在 PostgreSQL 上进行测试。 Postgres.app
适合测试,但我不会考虑将它用于生产或真实数据,这不是它的用途。
这是唯一为我修复它的:
createuser -s -U $USER
sudo
来获得临时超级用户权限。
对于它的价值,我安装了 ubuntu 和许多软件包,但它与它发生冲突。
对我来说,正确的答案是:
sudo -i -u postgres-xc
psql
我今天遇到了类似的问题,实际上我不确定用户名是什么。这是 2 件事,如果您属于企业并且没有系统管理员访问权限,postgres
将创建您的企业用户名作为 postgres
管理员用户名。如果您通过 Homebrew
安装它肯定会发生。在这种情况下,只需使用 brew 运行您的 psql 服务并回显用户名
brew services start postgresql
然后
echo $USER
您将看到 postgres 用户的用户名。
如果您在运行 docker 容器后立即遇到此问题,请尝试销毁容器并重新创建它。这为我解决了它:
docker-compose down
docker-compose up --force-recreate
这应该使用 postgresuser
作为默认用户重新创建数据库
我认为这里不需要 sudo,因为 psql -l 返回数据库列表。这告诉我 initdb 在用户的当前用户下运行,而不是在 postgres 用户下运行。
你可以:
psql
并继续教程。
我建议 AH 创建 postgres 用户和数据库的一般要点,因为许多应用程序可能期望这存在。
简要说明:
PostgreSQL 不会以对操作系统的管理权限运行。相反,它与普通用户一起运行,并且为了支持对等身份验证(询问正在尝试连接的操作系统),它创建一个用户和运行初始化过程的用户的数据库。在这种情况下,它是您的普通用户。
在 Ubuntu 系统上,我清除了 PostgreSQL 并重新安装它。所有数据库都已恢复。这为我解决了这个问题。
建议 - 备份数据库以确保安全。
通过自制软件安装了新的 mac (M1) 和最新的 postgres (14.0),对此主题没有任何帮助,但我只是重新安装了 postgres,它有所帮助:
brew services stop postgresql
rm -rf /opt/homebrew/var/postgres/*
brew reinstall postgresql
initdb --locale=C -E UTF-8 /opt/homebrew/var/postgres
brew services restart postgresql
所以,这是一个奇迹或类似的东西......
然后只是:
psql -d postgres
我在前一天执行 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
之后,第一个变体也可以使用。
对于 m1 芯片和 homebrew 版本 3.4.9,createuser
移动到特定包的 Cellar 内。这对我有用/opt/homebrew/Cellar/postgresql@12/12.10_1/bin/createuser -s postgres
对于 m1 芯片,如果您还没有通过 homebrew 安装 postgresql 包,请在终端中安装它:
brew install postgre
然后通过以下方式手动创建用户名:
/opt/homebrew/bin/createuser -s <username>
您的错误可能已修复;但如果你发生错误
致命:数据库“数据库名称”不存在
那么您必须通过以下方式手动创建数据库:
/opt/homebrew/bin/createdb -U <username> <databasename>
不定期副业成功案例分享
CREATE USER postgres WITH SUPERUSER PASSWORD 'password';
使用的是 postgres v10。homebrew
安装 Postgres,那么您需要在终端中运行/usr/local/opt/postgres/bin/createuser -s postgres
/usr/local/opt/postgresql/bin/createuser -s postgres
/usr/local/opt/postgresql@11/bin/createuser -s postgres
/opt/homebrew/bin/createuser -s postgres