it-swarm.com.de

Postgresql erstellt kein db mit "createdb" als Superuser, gibt jedoch keine Fehler aus

Ich arbeite mit einer neuen postgresql-Installation, mit 'postgres' super user. Eingeloggt über:

Sudo -u postgres psql


postgres=# createdb database
postgres-# \list
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres

Keine Fehler, noch keine Tabelle erstellt. Irgendwelche Ideen?

63
Damien Roche

createdb ist ein Befehlszeilenprogramm, das Sie von bash und nicht von psql ausführen können. Um eine Datenbank aus psql zu erstellen, verwenden Sie die create database-Anweisung wie folgt:

create database [databasename];

Hinweis: Achten Sie darauf, Ihre SQL-Anweisungen immer mit ; zu beenden.

138

Spät zur Party, aber die akzeptierte Antwort erklärt nicht, warum kein Fehler angezeigt wird. Und da Postgres-Neulinge oft darüber stolpern, wollte ich das hinzufügen.


TL/TR: Beenden Sie Ihre SQL-Anweisungen immer mit ;.


Da createdb database nicht mit ;psql aufgehört hat, hält die Anweisung die Anweisung nicht abgeschlossen und wartet auf weitere Eingaben. Dies wird angezeigt, wenn die Eingabeaufforderung von postgres=# zu postgres-# wechselt. Eine äußerst subtile Änderung, von der ich wünschte, dass psql anders wäre ("prominent"). 

Durch Eingabe des Meta-Befehls \list wird die "aktuelle" SQL-Anweisung "abgebrochen", ohne sie auszuführen. 

Wenn die createdb mit einem ; beendet worden wäre, wäre die Ausgabe:

postgres => createdb foobar; 
 ERROR: Syntaxfehler bei oder nahe bei "createdb" 
 LINE 1: Createdb foobar; 
 ^ 
 postgres =>

Deutlich zu zeigen, dass etwas nicht stimmte.

52

Ich war vor nicht allzu langer Zeit in dieser Situation. Falls dies bei einem anderen Benutzer auftritt, können Sie unter Berücksichtigung des Befehls Prompt postgres-# den ausstehenden Befehl createb ausführen, indem Sie einfach ; und die Eingabetaste eingeben.

0
Fred Mgbeoma