Ich betreibe eine Postgres-Datenbank auf einer Google Cloud-Instanz, die wir im Rahmen unseres nächtlichen Builds täglich löschen und neu erstellen. Derzeit erfolgt dies manuell und ich möchte es automatisieren.
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "dropdb mydb"
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "createdb mydb"
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "psql postgres -c 'GRANT ALL PRIVILEGES ON DATABASE mydb to myuser;' "
Das Löschen und Neuerstellen der Datenbank funktioniert einwandfrei, das Problem tritt jedoch auf, wenn ich das Kennwort neu einrichten muss ...
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "psql postgres -c 'ALTER USER myuser WITH PASSWORD 'passwordhere' ; "
gcloud
Der Befehl verwendet bereits doppelte Anführungszeichen, psql postgres -c
verwendet bereits einfache Anführungszeichen. Welche Anführungszeichen soll ich verwenden, um das Kennwort in Anführungszeichen zu setzen?
Ich habe versucht, die Anführungszeichen zu umgehen, aber das funktioniert nicht:
WITH PASSWORD \'passwordhere\'
FEHLER: Syntaxfehler bei oder in der Nähe von "\" ZEILE 1: ALTER USER myuser WITH PASSWORD \passwordhere'
oder
WITH PASSWORD \"passwordhere\"
bash: -c: Zeile 0: unerwartetes EOF beim Suchen nach übereinstimmendem `'' bash: -c: Zeile 1: Syntaxfehler: unerwartetes Dateiende
Wie entkomme ich diesen Anführungszeichen?
Antwort1
das scheint zu funktionieren:
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "psql postgres -c 'ALTER USER myuser WITH PASSWORD '\''passwordhere'\'' '; "
-
WITH PASSWORD '\''passwordhere'\''