Ter um banco de dados com nome que diferencia maiúsculas de minúsculas, como MyDb,
se eu quiser usar o psql para conceder todos os privilégios neste banco de dados ao usuário 'usuário', posso simplesmente escrever:
GRANT ALL PRIVILEGES ON DATABASE "MyDb" TO user;
funciona.
Mas e se eu quiser usar scripts de shell?
Executando o seguinte comando:
su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE \"MyDb\" TO user;\""
falha com o erro como:ERROR: database "mydb" does not exist
Responder1
Você poderia usar aspas simples:
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
Mas tome cuidado, pois se você estiver usando variáveis dentro de aspas simples, elas não serão expandidas. No seu caso específico, está tudo bem.
Editar: você também precisa escapar das aspas duplas dentro da solicitação, para que sejam passadas corretamente ao PostGres, a fim de indicar que o nome do banco de dados diferencia maiúsculas de minúsculas.