2016-08-15 73 views
1

我在OS X上做了一點PostgreSQL管理。 有時我需要將數據庫複製到另一個數據庫,我按照如下操作。如何在管道的兩側使用sudo -u

sudo -u _postgres pg_dump mydb > mydb.sql 
sudo -u _postgres psql -d mydb-testing -f mydb.sql 

但我寧願只是這樣做

sudo -u _postgres pg_dump mydb | sudo -u _postgres psql -d mydb-testing 

但是我做到這一點我被問了我的密碼,但它始終是拒絕了,因爲不正確的時候。

我正在尋找一種解決方案,我可以在管道兩側以_postgres用戶身份運行命令。

+0

爲什麼不'sudo su'然後運行? – raam86

+0

@ raam86配置的_postgres用戶沒有登錄shell'UserShell:/ usr/bin/false' –

回答

1

我相信只要你確保該sudo旨意不能同時向你的終端密碼

sudo -u _postgres pg_dump mydb | sudo -u _postgres psql -d mydb-testing 

應該工作。

如果我緩存我sudo的密碼,我可以管通常從一個sudo'ed命令到另一個:

sudo -u root echo hello world | sudo -u root tr a-z A-Z #prints HELLO WORLD 

另一種選擇是使用一個sudo產卵殼:

sudo -u _postgres sh -c 'pg_dump mydb | psql -d mydb-testing' 

( 如果你有很多事情要做,你可以使用heredoc:

sudo -u _postgres sh <<'SCRIPT' 
    pg_dump mydb | psql -d mydb-testing 
SCRIPT 

+0

啊,我不明白爲什麼當我運行該命令時我得到了不正確的密碼,因爲正如你指出的那樣同時要求輸入密碼。有沒有其他方法可以緩存密碼而不需要運行虛擬命令?還要感謝shell產卵和heredoc闡述。你已經解決了我的問題。 –

+2

@JasonS在管道命令之前運行'sudo -v'(「validate」);這將驗證您的憑據(即詢問您的密碼)並設置時間戳,以便它不會再要求5分鐘。 –