Имея базу данных с именем, чувствительным к регистру, например MyDb,
Если я хочу использовать psql для предоставления всех привилегий в этой базе данных пользователю «user», я могу просто написать:
GRANT ALL PRIVILEGES ON DATABASE "MyDb" TO user;
оно работает.
Но что, если я хочу использовать скрипты оболочки?
Выполнив следующую команду:
su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE \"MyDb\" TO user;\""
завершается ошибкой вида:ERROR: database "mydb" does not exist
решение1
Вы можете использовать одинарные кавычки:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
MyDb | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
$ su - postgres -c 'psql -c "grant all privileges on database \"MyDb\" to user;"'
GRANT
Но будьте осторожны, так как если вы используете переменные внутри одинарных кавычек, они не будут расширены. В вашем конкретном случае это нормально.
Редактировать: вам также необходимо экранировать двойные кавычки внутри запроса, чтобы они правильно передавались в PostGres, чтобы указать, что имя базы данных чувствительно к регистру.