2012-01-12 70 views
22

我得到這個錯誤,而試圖轉儲數據庫,我進入PostgreSQL的轉儲權限被拒絕

linuxuser $ sudo su postgres 
linuxuser $ [sudo] password for linuxuser:... 
$ pg_dump -h localhost mydb >tempfile 
$ sh: cannot create tempfile: Permission denied 

什麼問題?我剛剛安裝了新鮮的postgresql。

回答

42

寫入postgres用戶具有寫權限的目錄。例如/tmp

$ pg_dump -h localhost mydb >/tmp/tempfile 

在您的嘗試中,postgres用戶嘗試在屬於其他用戶的某個隨機目錄中創建文件。

5

sudo su postgres不會更改當前目錄,因此您仍然在linuxuser的主目錄中,並且postgres沒有寫入權限。 切換到不同的目錄

2

postgres用戶

至於其他的正確答案說,該文件夾在其中您正試圖保存備份沒有分配給postgres用戶(操作系統用戶帳戶)的權限。 postgres用戶是運行備份實用程序的用戶。這個用戶帳號是在Postgres安裝過程中創建的。您可能使用了不同的名稱,但默認爲postgres

文件夾權限

的解決方案是要麼找到或創建一個文件夾其中postgres用戶讀寫權限。

的Mac OS X

在Mac OS X(山獅),我可以在Finder來創建這樣一個文件夾。

  1. 在Finder中,創建一個新文件夾。選擇它。
    在這個例子中,我創建了一個名爲postgres_backups的文件夾。
  2. 選擇File>Get Info
  3. 打開Sharing & Permissions部分的顯示三角形。
  4. 單擊加號按鈕將另一項添加到用戶列表中。
    用戶列表出現在「表單」對話框中。
  5. 從列表中選擇postgres用戶。
  6. Privilege列中,對於新的postgres行,將彈出式菜單更改爲Read & Write
  7. 關閉Get Info窗口。完成。

現在您可以將您的Postgres備份文件指向該文件夾。

screen shot of a "Get Info" window in the Finder

順便說一句,我使用pgAdmin的應用程序進行備份和恢復。控制並點擊所需的數據庫並選擇Backups…。 pgAdmin應用程序可能與您的Postgres安裝捆綁在一起。

0

你必須要做的第一件事就是不要切換到用戶postgres。使用該命令進行備份:

% mkdir backup 

% chmod 0777 backup 

% su postgres 

[enter password] 

$ cd backup 

$ pg_dump mydb >tempfile 

$ exit 

「臨時文件」將是:

pg_dump -U username -h localhost dbname > /db.sql 
2

備份和恢復可以通過一個知道的Postgres通過在工作目錄更改權限的超級用戶口令的任何unpriviledged用戶完成擁有postgres和同組用戶

0

我試圖在Ubuntu機器上長時間備份我的PSQL數據庫,並嘗試用戶訪問權限,超級用戶狀態,文件夾屬性 - 這個「權限被拒絕」 -很多東西。最後,有些工作非常簡單。在命令:

pg_dump -U username -O dbname > 'filename.sql' 

請確保您有引號(單或雙引號似乎工作)圍繞如下比(「>」)標誌的更大的文件名。上面的例子沒有引號圍繞文件名。一旦我嘗試過,我不再收到權限被拒絕的錯誤。