2016-08-15 14 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ユーザーには、ログインシェル 'UserShell:/ usr/bin/false'がありません –

答えて

1

私は

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

は、限り、あなたはsudo sが同時にあなたの端末からパスワードを要求しないことを確認してよう動作するはずと信じています。

私は私のsudoのパスワードをキャッシュする場合は、私は別のsudo'edコマンドから正常にパイプすることができます:

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

別のオプションは、シェルを起動するために1 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

あのコマンドを実行したときに、なぜ私が誤ったパスワードを取得したのか分かりませんでした。同時にパスワードを要求しています。ダミーコマンドを実行するだけでパスワードをキャッシュする方法はありますか?シェルの産卵とheredocの精緻化にも感謝します。あなたは私の問題を解決しました。 –

+2

@JasonSパイプされたコマンドの前に 'sudo -v'(" validate ")を実行します。資格情報を確認する(つまりパスワードを尋ねます)、タイムスタンプを設定して5分間もう一度聞かないようにします。 –

関連する問題