2012-03-07 194 views
9

我目前使用psql -U postgres登录到PostgreSQL。我如何将postgres用户重命名为root如何将默认postgres超级用户重命名为“root”?

如果我已经登录为postgres然后尝试ALTER USER postgres RENAME TO root将会说ERROR: session user cannot be renamed

是否有可能重命名用户而不记录为postgres用户?我不认为我有其他超级用户,因为这是PostgreSQL的全新安装。

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

+1

我想象:以postgres身份登录,创建第二个超级用户,以新超级用户身份登录并运行ALTER – 2012-03-07 19:05:56

+2

为什么要这样做?您不能以“root”身份运行postmaster,因为它只会在作为非特权用户运行时启动。 – 2012-03-07 20:00:23

+0

Linux中的'postgres'用户是否必须与数据库中的'postgres'角色相匹配?我以'root'身份登录,所以我只想键入'psql -d something'来登录,以反对'psl -U postgres -d something'。 – hobbes3 2012-03-08 16:44:55

回答

13

您应该可以通过以postgres用户身份和(在shell中)键入方式登录创建一个名为root的新的postgres超级用户;

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

之后,当以root身份登录时,您应该能够对postgres用户执行所需的操作。

+0

你是说在'psql'里输入那个?它似乎没有做任何事情。 – hobbes3 2012-03-07 19:17:22

+0

@ hobbes3不,从普通的shell中,不在psql中。 – 2012-03-07 19:17:52

+0

@ hobbes3没有一个方便的gentoo盒子,只是一个Ubuntu,如果你有问题,路径可能不会被设置。 – 2012-03-07 19:19:22

2

您可以尝试

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

但要注意,通过手大嚼系统目录总是有点危险。

+0

这似乎工作。角色和用户有什么区别?当我执行'psql -U postgres'时,我是否以'postgres'用户或角色登录? – hobbes3 2012-03-07 19:16:15

+1

@ hobbes3:AFAIK“user”和“group”是历史名词,然后被折叠成“角色”。所以这些术语在很大程度上是可以互换的。所以你是用角色/用户“postgres”登录的。 – 2012-03-07 19:20:00

+1

@ hobbes3:在现代PostgreSQL中,“用户”是[登录角色](http://www.postgresql.org/docs/current/interactive/sql-createuser.html),“组”没有。内部只有角色。 – 2012-03-07 22:21:18

4

什么:使用

ALTER ROLE postgres RENAME TO root; 

不同的超级用户的角色?

+0

“错误:会话用户无法重命名”。请注意,该OP以'postgres'登录。 – Jawa 2013-09-09 09:33:37