postgres 敏感資料庫名稱權限的雙引號內雙引號問題

postgres 敏感資料庫名稱權限的雙引號內雙引號問題

擁有一個名稱區分大小寫的資料庫,例如 MyDb,

如果我想使用 psql 將此資料庫的所有權限授予用戶“user”,我可以這樣寫:

GRANT ALL PRIVILEGES ON DATABASE "MyDb" TO user;

有用。

但是如果我想使用 shell 腳本怎麼辦?

運行以下命令:

su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE \"MyDb\" TO user;\""

失敗並出現以下錯誤:ERROR: database "mydb" does not exist

答案1

您可以使用單引號:

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

但要小心,就像您在單引號內使用變數一樣,它們不會被擴展。在你的具體情況下,沒關係。

編輯:您還需要轉義請求中的雙引號,以便它們正確傳遞給 PostGres,以指示資料庫名稱區分大小寫。

相關內容