如何将默认的postgres超级用户重命名为“root”?

17

我目前使用 psql -U postgres 登录到 PostgreSQL,如何将 postgres 用户重命名为 root

如果我已经以 postgres 用户登录,则尝试 ALTER USER postgres RENAME TO root 会显示 ERROR:无法重命名会话用户

是否可以在不以 postgres 用户身份登录的情况下重命名用户?我认为在这个全新安装的 PostgreSQL 上,我没有其他超级用户。

顺便说一句,我在 Amazon EC2 上运行 Gentoo。


3
我想:以postgres身份登录,创建第二个超级用户,以新的超级用户身份登录,然后运行您的ALTER命令。 - Frank Farmer
2
为什么要这样做?你不能将postmaster作为“root”运行,因为只有在以非特权用户身份运行时才会启动。 - Matthew Wood
1
Linux中的postgres用户是否必须与数据库中的postgres角色匹配?我以root身份登录,所以我只想键入psql -d something来登录,而不是psl -U postgres -d something - hobbes3
4个回答

17

你应该能够通过登录postgres用户并(在shell中)输入以下命令来创建一个名为root的新的postgres超级用户:

createuser --superuser root
psql> create database root owner root

在那之后,当以root身份登录时,您应该能够对postgres用户进行想要的操作。


你是说要在 psql 中输入这个吗?但好像没有任何反应。 - hobbes3
@hobbes3 不是在psql中,而是从常规shell中执行。 - Joachim Isaksson
@hobbes3 我手头没有 Gentoo,只有一个 Ubuntu,如果你遇到问题,可能路径没有设置好。 - Joachim Isaksson
为什么使用 create database 命令来创建用户? - bravmi

8
你可以尝试一下:

update pg_authid set rolname ='root' where rolname = 'postgres';

但是请注意,手动浏览系统目录总是有些危险的。


似乎起作用了。角色和用户之间有什么区别?当我执行 psql -U postgres 时,我是以 postgres 用户还是角色登录的? - hobbes3
1
据我所知,“用户”和“组”是历史术语,后来被合并为“角色”。因此,在很大程度上,这些术语是可以互换的。因此,您使用角色/用户“postgres”登录。 - A.H.
2
@hobbes3:在现代的PostgreSQL中,“用户”是具有登录功能的角色,而“组”则没有。在内部只有角色。 - Erwin Brandstetter
2
@A.H. 感谢你提醒我关于“吞噬系统目录”的问题,我本以为这样可以省下5分钟的时间。结果我却花费了一个小时(因为我把它弄坏了)。给其他人一些提示:如果需要重新安装,请使用--purge(apt-get)删除postgres和依赖项。 - Scott Stevens

6

这个怎么样:

ALTER ROLE postgres RENAME TO root;

使用不同的超级用户角色?

10
“ERROR: session user cannot be renamed” 的意思是“错误:会话用户无法更名”。需要注意的是,OP以“postgres”身份登录。 - Jawa

6
为了将当前用户 oldname 重命名为 newname,首先以 oldname 用户登录,并创建一个临时超级用户,如下所示:
CREATE ROLE temp LOGIN SUPERUSER PASSWORD 'mytemporarypassword';

退出当前账户,然后用 temp 超级用户登录并重命名 oldname 用户。与此同时,您需要重置该用户的密码,因为 PostgreSQL 会告诉您:"由于角色重命名,MD5 密码已清除"。

ALTER ROLE oldname RENAME TO newname;
ALTER USER newname WITH PASSWORD 'My-Mega-5ecure-P4ssw0rd';

现在使用newname用户登录,并删除之前创建的临时用户:

DROP ROLE temp;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接