147 votes

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

Je travaille avec une nouvelle installation de postgresql, avec le super utilisateur 'postgres'. Je me suis 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 créée. Avez-vous une idée ?

344voto

Saddam Abu Ghaida Points 5445

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 le create database comme suit :

create database [databasename];

Note : veillez à toujours terminer vos instructions SQL par ;

119voto

a_horse_with_no_name Points 100769

J'arrive tard, mais la réponse acceptée n'explique pas pourquoi aucune erreur n'est affichée. Et comme il s'agit d'un point sur lequel les nouveaux venus dans Postgres butent souvent, je tenais à l'ajouter.


TL/TR : toujours terminer vos instructions SQL avec ;


Parce que le createdb database ne s'est pas terminé avec ; psql pense que la déclaration n'est pas terminée et attend d'autres données. Ceci est indiqué par le changement de l'invite de postgres=# a postgres-# . Un changement extrêmement subtil que je souhaite psql ferait différemment (plus "proéminent").

En entrant la méta-commande \list l'instruction SQL "courante" est "abandonnée" sans être exécutée.

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

postgres=> createdb foobar;
ERROR:  syntax error at or near "createdb"
LINE 1: createdb foobar;
        ^
postgres=>

Montrant clairement que quelque chose n'allait pas.

8voto

EndePointe Points 41

En utilisant un terminal node, j'ai dû exécuter :

psql -U postgres 

[entrez votre mot de passe]

alors...

CREATE DATABASE dbadmin;

Ce qui est déroutant, c'est que j'ai entré ces mêmes commandes auparavant et 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

5voto

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

5voto

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;"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X