Двойные кавычки в проблеме Двойных кавычек для пост-ГРЭС чувствительные полномочия имени базы данных

Наличие базы данных с чувствительным к регистру именем как 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

0
задан 12 November 2015 в 13:25

1 ответ

Вы могли использовать 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 с учетом регистра.

0
ответ дан 28 July 2019 в 08:48

Другие вопросы по тегам:

Похожие вопросы: