Wenn Sie eine Datenbank mit Groß- und Kleinschreibungserkennung wie MyDb haben,
Wenn ich beispielsweise psql verwenden möchte, um dem Benutzer „user“ alle Berechtigungen für diese Datenbank zu erteilen, kann ich einfach Folgendes schreiben:
GRANT ALL PRIVILEGES ON DATABASE "MyDb" TO user;
Es klappt.
Aber was ist, wenn ich Shell-Skripte verwenden möchte?
Ausführen des folgenden Befehls:
su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE \"MyDb\" TO user;\""
schlägt mit folgendem Fehler fehl:ERROR: database "mydb" does not exist
Antwort1
Sie könnten einfache Anführungszeichen verwenden:
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
Aber seien Sie vorsichtig, denn wenn Sie Variablen innerhalb der einfachen Anführungszeichen verwenden, werden diese nicht erweitert. In Ihrem speziellen Fall ist das jedoch in Ordnung.
Bearbeiten: Sie müssen auch die Anführungszeichen in der Anfrage maskieren, damit sie korrekt an PostGres übergeben werden, um anzuzeigen, dass beim DB-Namen die Groß-/Kleinschreibung beachtet wird.