2016-08-15 3 views
1

Ich mache ein bisschen PostgreSQL-Administration unter OS X. Manchmal muss ich eine Datenbank in eine andere Datenbank kopieren, die ich wie folgt tun.Wie sudo -u auf beiden Seiten einer Pipe verwenden

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

Aber ich würde lieber tun gerade diese

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

Allerdings, wenn ich das tue ich mein Passwort gefragt werden, aber es wird immer als falsch abgelehnt.

Ich suche nach einer Lösung, wo ich einen Befehl als _postgres Benutzer auf beiden Seiten einer Pipe ausführen kann.

+0

warum nicht 'sudo su' und dann run? – raam86

+0

@ raam86 Der _postgres-Benutzer, wie er konfiguriert ist, hat keine Login-Shell 'UserShell:/usr/bin/false' –

Antwort

1

Ich glaube

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

sollte so lange arbeiten, wie Sie sicherstellen, dass die sudo s nicht gleichzeitig für Ihr Passwort von Ihrem Terminal fragen.

Wenn ich sudo Passwort-Cache, kann ich Rohr normalerweise von einem sudo'ed Befehl zum anderen:

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

Eine weitere Option ist eine verwenden sudo eine Shell zum Laichen:

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

( Sie können ein heredoc verwenden, wenn Sie viele Dinge in dieser Shell zu tun haben:

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

)

+0

Ah, ich habe nicht verstanden, warum ich ein falsches Passwort bekommen habe, als ich diesen Befehl ausgeführt habe, weil Sie darauf hingewiesen haben fragt gleichzeitig nach dem Passwort. Gibt es eine andere Möglichkeit, das Passwort zwischenzuspeichern, ohne nur einen Dummy-Befehl auszuführen? Danke auch für die Muschel-Laich- und Heredoc-Ausarbeitung. Du hast mein Problem gelöst. –

+2

@JasonS Führe 'sudo -v' (" validate ") vor den piped-Befehlen aus; Dadurch werden Ihre Anmeldeinformationen überprüft (z. B. nach Ihrem Kennwort gefragt) und der Zeitstempel festgelegt, sodass Sie ihn nicht erneut für 5 Minuten anfordern. –

Verwandte Themen