私は Google Cloud インスタンスで postgres データベースを実行しており、夜間ビルドの一環として毎日これを削除して再作成しています。現在これは手動で行われていますが、自動化したいと考えています。
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;' "
これはデータベースを削除して再作成するには問題なく機能しますが、パスワードを再設定する必要がある場合に問題が発生します...
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "psql postgres -c 'ALTER USER myuser WITH PASSWORD 'passwordhere' ; "
gcloud
コマンドではすでに二重引用符が使用されていますが、psql postgres -c
すでに一重引用符が使用されています。パスワードを引用符で囲むにはどの引用符を使用すればよいですか?
引用符をエスケープしようとしましたが、機能しません。
WITH PASSWORD \'passwordhere\'
エラー: "\" またはその付近に構文エラーがあります。行 1: ALTER USER myuser WITH PASSWORD \passwordhere'
または
WITH PASSWORD \"passwordhere\"
bash: -c: 行 0: 一致する `'' を検索中に予期しない EOF が発生しました bash: -c: 行 1: 構文エラー: 予期しないファイルの終了です
どうすれば引用符を回避できますか?
答え1
これは動作するようです:
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "psql postgres -c 'ALTER USER myuser WITH PASSWORD '\''passwordhere'\'' '; "
-
WITH PASSWORD '\''passwordhere'\''