Problem mit doppelten Anführungszeichen in doppelten Anführungszeichen bei Postgres-sensiblen Datenbanknamenprivilegien

Problem mit doppelten Anführungszeichen in doppelten Anführungszeichen bei Postgres-sensiblen Datenbanknamenprivilegien

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.

verwandte Informationen