Почему не могу задать пароль пользователя postgres?

Собственно делаю следующее
dracon@debianTest:~$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'A******e!qA'; "
-bash: !qA': event not found

Насколько я понял, проблема в символе !
Но вроде же все экранировал ковычками ?
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
@glavvra4
Senior Backend Developer (PHP)
Символ "!", помещенный в двойные кавычки, порождает сообщение об ошибке, если команда вводится с командной строки. Объясняется тем, что этот символ интерпретируется bash, как попытка обращения к истории команд. Можно обойти эту особенность, используя что-то вроде:

sudo -u postgres psql -U postgres -c 'alter user postgres with password'\''A******e!qA'\'';'


Выглядит устрашающе, но для понимания можно разделить SQL-запрос на следующие части:
1) Первая часть 'alter user postgres with password' - экранируется одиночными кавычками
2) Первая кавычка \' - экранируется слешем
3) Пароль 'A******e!qA' - экранируется одиночными кавычками. Восклицательный знак больше не интерпретируется, как обращение к истории запросов
4) Вторая кавычка \' - также, как и первая экранируется слешем
5) Оставшаяся часть, в виде ';' - экранируется кавычками

Вот такое вот экранирование экранирования)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Попробуй заменить двойные кавычки на одинарные (внутри наоборот)
sudo -u postgres psql -U postgres -c 'alter user postgres with password "A******e!qA"; '
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы