web-dev-qa-db-fra.com

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

Je travaille avec une nouvelle installation postgresql, avec le 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?

63
Damien Roche

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

create database [databasename];

Remarque: veillez à toujours terminer vos instructions SQL avec ;

138
Saddam Abu Ghaida

En retard pour le parti, mais la réponse acceptée n'explique pas pourquoi aucune erreur n'est affichée. Et comme c'est quelque chose qui tombe souvent sur les nouveaux arrivants de Postgres, je voulais ajouter cela.


TL/TR: finissez toujours vos instructions SQL avec ;


Parce que le createdb database ne s'est pas terminé par ;psql pense que l'instruction n'est pas terminée et attend d'autres entrées. Ceci est indiqué par l'invite qui passe de postgres=# à postgres-#. Un changement extrêmement subtil que je souhaite psql ferait différemment (plus "important"). 

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

Si la createdb s'était terminée par un ;, le résultat aurait été:

postgres => createdb foobar; 
 ERROR: erreur de syntaxe proche de "createdb" 
 LINE 1: createdb foobar; 
 ^ 
 postgres =>

Montrer clairement que quelque chose n'allait pas.

52

J'étais dans cette situation il n'y a pas longtemps. Au cas où quelqu'un d'autre l'aurait rencontré, considérant que la commande Invite affiche postgres-#, vous pouvez exécuter la commande createdb en attente en tapant simplement ; et la clé de retour.

0
Fred Mgbeoma