Überprüfen Sie, ob eine postgresql-Datenbank vorhanden ist (ohne Berücksichtigung der Groß- und Kleinschreibung).

9

Gibt es eine "elegante integrierte" Methode, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, um zu überprüfen, ob eine Datenbank vorhanden ist?

Ich habe nur gefunden SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', aber dies ist eine CS-Prüfung. Das erste, was mir einfällt, ist, alle Datenbanknamen abzurufen und von Hand zu filtern, aber ich denke, es gibt eine elegantere Möglichkeit, dies zu tun.

Andrei Orlov
quelle
Warum möchten Sie eine Groß- und Kleinschreibung ohne Berücksichtigung der Groß- und Kleinschreibung prüfen?
Evan Carroll

Antworten:

18

Sie können verwenden:

SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname');

... Bei Datenbanknamen wird jedoch zwischen Groß- und Kleinschreibung unterschieden, sodass der Versuch, eine Verbindung zum DB-Namen herzustellen, nur dann funktioniert, wenn Sie die Groß- und Kleinschreibung korrekt zuordnen. Hierfür werden keine Indizes verwendet dbname, aber es ist eher unwahrscheinlich, dass Sie über genügend Datenbanken verfügen, damit dies von Bedeutung ist.

Die Leute wissen das nicht, weil PostgreSQL nicht zitierte Bezeichner in Kleinbuchstaben faltet, so dass es für Clients die meiste Zeit ohne Berücksichtigung der Groß- und Kleinschreibung aussieht. In der Tat "DatabaseName"und "databasename"sind verschiedene Dinge.

Craig Ringer
quelle
4

Wenn Sie eine wahre / falsche Antwort wünschen, können Sie verwenden

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Thomas Turner
quelle