Tener una base de datos con nombres que distingan entre mayúsculas y minúsculas como MyDb,
Si quiero usar psql para otorgar todos los privilegios en esta base de datos al usuario 'usuario', simplemente puedo escribir:
GRANT ALL PRIVILEGES ON DATABASE "MyDb" TO user;
funciona.
Pero ¿qué pasa si quiero utilizar scripts de shell?
Ejecutando el siguiente comando:
su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE \"MyDb\" TO user;\""
falla con el error como:ERROR: database "mydb" does not exist
Respuesta1
Podrías usar comillas 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
Pero tenga cuidado, ya que si usa variables dentro de comillas simples, no se expandirán. Sin embargo, en tu caso específico, está bien.
Editar: también debe eliminar las comillas dobles dentro de la solicitud, para que se pasen correctamente a PostGres, para indicar que el nombre de la base de datos distingue entre mayúsculas y minúsculas.