拥有区分大小写名称的数据库(如 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,以表明数据库名称区分大小写。