Я использую базу данных postgres в экземпляре Google Cloud, которую мы удаляем и воссоздаем ежедневно в рамках нашей ночной сборки. В настоящее время это делается вручную, и я хочу это автоматизировать.
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: ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ myuser С ПАРОЛЕМ \ passwordhere '
или
WITH PASSWORD \"passwordhere\"
bash: -c: line 0: неожиданный EOF при поиске соответствия bash: -c: line 1: синтаксическая ошибка: неожиданный конец файла
Как мне избежать этих цитат?
похоже, это работает:
gcloud compute ssh --zone europe-west2-c postgres@postgresql-dev -- "psql postgres -c 'ALTER USER myuser WITH PASSWORD '\''passwordhere'\'' '; "
-
WITH PASSWORD '\''passwordhere'\''