Одиночные кавычки вокруг пароля съедаются оболочкой до того, как PostgreSQL их увидит. Вам нужно как-то избежать их.
Один из способов - заключить всю вашу команду в кавычки, используя двойные кавычки оболочки, а не одинарные кавычки, поскольку одинарные кавычки внутри двойных кавычек не являются особенными.
psql -c "CREATE ROLE davide2 LOGIN PASSWORD 'jw8s0F4'"
но если ваш пароль содержит специальные символы внутри двойных кавычек оболочки, например, знаки доллара, это будет проблемой. (так что просто сделайте пароль длиннее и исключите из него любые такие символы)
Если я уберу их, удвоив их, я все равно получу ту же ошибку
удвоение кавычки - это то, как вы избегаете их внутри SQL, но это не то, как вы избегаете их в оболочке. Проблема в том, что ваши одинарные кавычки не попадают в SQL в первую очередь потому, что оболочка их съедает.
Если двойные кавычки оболочки для всей команды не работают для вас, иначе вы экранирование одинарных кавычек в оболочке - это обратный удар. Проблема в том, что обратный удар внутри одинарных кавычек не работает как выход, поэтому вам нужно закрыть одинарные кавычки, вернуть одинарную кавычку, затем снова открыть одинарные кавычки, а затем повторить все это на другом конце. Кроме того, в целях тестирования вы можете заменить psql -c
на echo
, чтобы вы могли видеть, что оболочка будет передавать в psql, не запуская его.
echo 'CREATE ROLE davide3 LOGIN PASSWORD '\''jw8s0F4'\'' '