2012-03-07 195 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