Postgresql erstellt keine Datenbank mit "createdb" als Superuser, gibt jedoch keine Fehler aus [Duplikat]


100

Ich arbeite mit einer neuen postgresql-Installation mit dem Superuser 'postgres'. 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, es wird jedoch keine Tabelle erstellt. Irgendwelche Ideen?


Antworten:


207

createdbist ein Befehlszeilenprogramm, das Sie von bash und nicht von psql ausführen können . Verwenden Sie die folgende Anweisung, um eine Datenbank aus psql zu erstellen create database:

create database [databasename];

Hinweis: Beenden Sie Ihre SQL-Anweisungen immer mit ;


35
Danke, ich werde mich jetzt schlagen. :)
Damien Roche

Sicher. Einfache Punkte;) Müssen noch 7 Minuten warten (anscheinend). Danke noch einmal.
Damien Roche

35
Vergessen Sie nicht, das Semikolon am Ende hinzuzufügen.;
Timothy Dalton

4
das Semi-Colin für den Sieg!
Michael Dimmitt

1
Danke dir! Das Semikolon hat die Arbeit für mich erledigt. so winzig und doch lebensverändernd;)
sas

75

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


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


Weil das createdb databasenicht mit dem ; psqlGedanken endete, dass die Anweisung noch nicht fertig ist und auf weitere Eingaben wartet. Dies wird durch die Eingabeaufforderung angezeigt, die von postgres=#nach wechselt postgres-#. Eine äußerst subtile Veränderung, die ich mir wünschepsql anders würde ("prominenter").

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

Wenn das createdbmit einem beendet worden wäre; wäre, wäre die Ausgabe gewesen:

postgres => createdb foobar;
FEHLER: Syntaxfehler bei oder in der Nähe von "createdb"
Zeile 1: Erstellt von Foobar;
        ^
postgres =>

Deutlich zeigen, dass etwas nicht stimmte.


3
Wow, das ist zwar subtil, aber tödlich. Ich hatte dieses Problem schon seit einiger Zeit. Wenn Sie den Befehl zum ersten Mal mit einem Semikolon ausführen, wird der Fehler angezeigt, da er createdbnicht gültig ist. Aber dann funktioniert es perfekt, genau denselben Befehl mit create databasestatt createdbmit einem Semikolon zu wiederholen .
Glen Selle

1
@Helsing: das habe ich geschrieben, ich habe nur erklärt, warum es keine Fehlermeldung gab, obwohl sie ungültig ist
a_horse_with_no_name

@a_horse_with_no_name Ja, ich habe deinen Zweck falsch verstanden. Hat auch Ihre Antwort positiv bewertet.
Helsing

3

Ich war vor nicht allzu langer Zeit in dieser Situation. Falls dies bei einer anderen Person postgres-#auftritt, können Sie den ausstehenden Befehl createb ausführen, indem Sie einfach die Eingabetaste eingeben ;.


1

Das Erstellen einer neuen Datenbank in PostgreSQL ist sehr einfach. Führen Sie diesen Befehl unter Linux aus (CentOS 7-Beispiel):

sudo -u postgres psql -c "create database MyDb;"

0

Mit einem Knotenterminal musste ich Folgendes ausführen:

psql -U postgres 

[Passwort eingeben]

dann ...

CREATE DATABASE dbadmin;

Was verwirrend ist, ist, dass ich dieselben Befehle zuvor eingegeben habe und es nicht funktioniert hat. Erst nach dem Abmelden und erneuten Anmelden konnte ich diesen Standardbefehl aus der Dokumentation verwenden: https://www.postgresql.org/docs/10/tutorial-createdb.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.