擁有一個名稱區分大小寫的資料庫,例如 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,以指示資料庫名稱區分大小寫。