Наличие базы данных с чувствительным к регистру именем как MyDb,
если я хочу использовать psql для предоставления всех полномочий на этой базе данных пользователю 'пользователь', я могу просто записать:
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
Вы могли использовать singlequotes:
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
, Но быть осторожными, как будто Вы используете переменные в singlequotes, они не будут расширены. В Вашем конкретном случае это в порядке все же.
Редактируют : Вы также должны избежать doublequotes в запросе, таким образом, они правильно переданы в PostGres, чтобы указать, что имя DB с учетом регистра.