Double Quotes dentro do problema de Double Quotes para privilégios de nome de banco de dados sensíveis a postgres

0

Ter um banco de dados com nome sensível a maiúsculas como MyDb,

se eu quiser usar o psql para conceder todos os privilégios neste banco de dados ao usuário 'user', posso 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: ERROR: database "mydb" does not exist

    
por Ehsan Mahdavi 12.11.2015 / 11:25

1 resposta

0

Você pode 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 tenha cuidado, como se você estivesse usando variáveis dentro das únicaspas, elas não serão expandidas. No seu caso específico, tudo bem.

Editar : você também precisa escapar do doublequotes dentro da solicitação, então eles são passados corretamente para PostGres, a fim de indicar que o nome do banco de dados faz distinção entre maiúsculas e minúsculas.

    
por aanc 12.11.2015 / 11:38