2014-01-08 95 views
5

不幸的是,我已經從PostgreSQL中的postgres用戶中刪除了超級用戶權限。目前我在PostgreSQL中沒有任何超級用戶。我想成爲超級用戶。那我該怎麼做呢?每次我試圖讓超級用戶的postgres。我正面臨着這個問題。錯誤:必須是超級用戶才能更改超級用戶

Error : must be superuser to alter superusers. 

由於提前,

回答

2

你將不得不停止數據庫系統,並啓動獨立的後端,它總是無條件地運行作爲一個超級用戶。

您可以使用此後端到ALTER您希望授予超級用戶權限的用戶。然後關閉獨立後端並正常啓動數據庫。

在進入單用戶模式之前,完全停止數據庫服務器非常重要。如果有postmaster,PostgreSQL單用戶模式將拒絕啓動,但要確保您的系統上沒有運行PostgreSQL進程。 Under (almost) no circumstances should you ever delete postmaster.pid - 如果仍然有PostgreSQL進程訪問該數據目錄,那麼幾乎可以確保導致數據庫損壞。

準確地說,如何啓動一個獨立的後端,取決於您的操作系統/發行版以及您如何安裝PostgreSQL。你沒有包含這個信息,所以我只能指出你在the manual for the postgres back-end executable

首先進行備份。

In the single-user mode, the session user will be set to the user with ID 1, and implicit superuser powers are granted to this user. This user does not actually have to exist, so the single-user mode can be used to manually recover from certain kinds of accidental damage to the system catalogs.

見節單用戶模式選項和朝向底部,用法。您需要以--single,作爲擁有數據庫文件的unix用戶以及指向datadir的路徑運行postgres後端。在一個典型的Linux PostgreSQL的安裝,這可能是這樣的:

sudo systemctl stop postgresql-9.3.service 
sudo -u postgres /usr/pgsql-9.3/bin/postgres --single -D /var/lib/pgsql/9.3/data 

你DATADIR和postgres可執行文件的位置是很可能不同。以上是針對Fedora系統運行的PGDG PostgreSQL包,其編號爲http://yum.postgresql.org/

+0

感謝一堆。我使用puppet模塊來定義數據庫,我認爲可以將postgres用戶設置爲數據庫的所有者,但woops Postgresql :: Server :: Db [mydb]/Postgresql :: Server :: Role [postgres]/Postgresql_psql [ALTER ROLE「postgres」NOSUPERUSER]/command)命令將'notrun'改爲'ALTER ROLE'postgres「NOSUPERUSER' – tobixen

7

(假設你的Ubuntu機器上的root訪問權限)

要輸入的psql作爲超級用戶,你需要:

sudo -u postgres psql 

在此建議SO發佈here

如果沒有用戶名爲postgres,您需要先在系統上創建它:

sudo adduser newuser 

否則,如果你有密碼不被接受或沒有創建的所有問題,你可以遵循(Ubuntu 14.04相關)指令here或更多關於用戶帳戶的外觀here

+0

這並不回答這個問題。 – lunr

相關問題