PostgreSQL ne crée pas de base de données avec "createdb" comme superutilisateur, mais ne génère pas d'erreurs [dupliquer]

100

Je travaille avec une nouvelle installation de postgresql, avec un super utilisateur «postgres». Connecté via:

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

Aucune erreur, mais la table n'est pas en cours de création. Des idées?

Damien Roche
la source
Étroitement lié à stackoverflow.com/questions/8537576/…
Craig Ringer

Réponses:

208

createdbest un utilitaire de ligne de commande que vous pouvez exécuter depuis bash et non depuis psql. Pour créer une base de données à partir de psql , utilisez l' create databaseinstruction comme suit:

create database [databasename];

Remarque: veillez à toujours terminer vos instructions SQL par ;

Saddam Abu Ghaida
la source
35
Merci, je vais me gifler maintenant. :)
Damien Roche
Sûr. Points faciles;) Il faut encore attendre 7 minutes (apparemment). Merci encore.
Damien Roche
35
n'oubliez pas d'ajouter le point-virgule à la fin ..;
Timothy Dalton
4
ce semi-colin pour la victoire!
Michael Dimmitt
1
Je vous remercie! le point-virgule a fait le travail pour moi. si petit mais qui change la vie;)
sas
75

En retard à la fête, mais la réponse acceptée n'explique pas pourquoi aucune erreur ne s'affiche. Et comme c'est quelque chose sur lequel les nouveaux arrivants de Postgres tombent souvent, je voulais ajouter cela.


TL / TR: terminez toujours vos instructions SQL par ;


Parce que le createdb databasene se termine pas par ; psqlpense que l'instruction n'est pas terminée et attend plus d'entrée. Ceci est indiqué par l'invite passant de postgres=#à postgres-#. Un changement extrêmement subtil que je souhaite psqlfaire différemment (plus "proéminent").

En entrant la méta-commande, \listl'instruction SQL "courante" est "abandonnée" sans l'exécuter.

Si le createdbavait été terminé par un, ;la sortie aurait été:

postgres => createdb foobar;
ERREUR: erreur de syntaxe à ou près de "createdb"
LIGNE 1: createdb foobar;
        ^
postgres =>

Montrer clairement que quelque chose n'allait pas.

un cheval sans nom
la source
3
Wow, c'est en effet subtil mais mortel. J'avais ce problème depuis un certain temps. La première fois que vous exécutez la commande avec un point-virgule, vous obtiendrez l'erreur car elle createdbn'est pas valide. Mais répéter exactement la même commande avec create databaseau lieu de createdbavec un point-virgule fonctionne parfaitement.
Glen Selle
1
@Helsing: c'est ce que j'ai écrit, je viens d'expliquer pourquoi il n'y avait pas de message d'erreur même s'il n'est pas valide
a_horse_with_no_name
@a_horse_with_no_name Oui, j'ai mal compris votre but. J'ai également voté pour votre réponse.
Helsing
3

J'étais dans cette situation il n'y a pas longtemps. Au cas où quelqu'un d'autre éprouverait cela, étant donné que l'invite de commande montre que postgres-#vous pouvez exécuter la commande createdb en attente en tapant simplement ;et la touche de retour.

Fredrick Mgbeoma
la source
1

Créer une nouvelle base de données dans PostgreSQL est très simple, exécutez cette commande sous Linux (exemple CentOS 7):

sudo -u postgres psql -c "create database MyDb;"
Avtandil Kavrelishvili
la source
0

En utilisant un terminal de nœud, j'ai dû exécuter:

psql -U postgres 

[tapez votre mot de passe]

puis ...

CREATE DATABASE dbadmin;

Ce qui est déroutant, c'est que j'ai entré ces mêmes commandes auparavant et que cela n'a pas fonctionné. Ce n'est qu'après m'être déconnecté et reconnecté que j'ai pu utiliser cette commande standard de la documentation: https://www.postgresql.org/docs/10/tutorial-createdb.html

EndePointe
la source