Postgresql no crea la base de datos con "createdb" como superusuario, pero no genera errores [duplicado]

100

Estoy trabajando con una nueva instalación de postgresql, con el superusuario 'postgres'. Conectado a través de:

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

No hay errores, pero la tabla no se está creando. ¿Algunas ideas?

Damien Roche
fuente
Estrechamente relacionado con stackoverflow.com/questions/8537576/…
Craig Ringer

Respuestas:

208

createdbes una utilidad de línea de comandos que puede ejecutar desde bash y no desde psql. Para crear una base de datos desde psql , use la create databasedeclaración así:

create database [databasename];

Nota: asegúrese de terminar siempre sus declaraciones SQL con ;

Saddam Abu Ghaida
fuente
35
Gracias, me abofetearé ahora. :)
Damien Roche
Por supuesto. Puntos fáciles;) Necesito esperar 7 minutos todavía (aparentemente). Gracias de nuevo.
Damien Roche
35
no olvides agregar el punto y coma al final.;
Timothy Dalton
4
ese semi-colin para la victoria!
Michael Dimmitt
1
¡Gracias! el punto y coma hizo el trabajo por mí. tan pequeño pero que cambia la vida;)
sas
75

Llega tarde a la fiesta, pero la respuesta aceptada no explica por qué no se muestra ningún error. Y como esto es algo con lo que se topan a menudo los recién llegados a Postgres, quería agregar eso.


TL / TR: siempre termine sus declaraciones SQL con ;


Debido a createdb databaseque no terminó con, ; psqlpiensa que la declaración no está terminada y espera más información. Esto se indica mediante la indicación que cambia de postgres=#a postgres-#. Un cambio extremadamente sutil que me gustaría psqlque hiciera de manera diferente (más "prominente").

Al ingresar el metacomando, \listla instrucción SQL "actual" se "cancela" sin ejecutarla.

Si se createdbhubiera terminado con a, ;la salida habría sido:

postgres => createdb foobar;
ERROR: error de sintaxis en o cerca de "createdb"
LÍNEA 1: createdb foobar;
        ^
postgres =>

Mostrando claramente que algo andaba mal.

un caballo sin nombre
fuente
3
Vaya, esto es realmente sutil pero mortal. Tuve este problema durante bastante tiempo. La primera vez que ejecute el comando con punto y coma, obtendrá el error porque createdbno es válido. Pero luego repetir exactamente el mismo comando con en create databaselugar de createdbjunto con un punto y coma funciona perfectamente.
Glen Selle
1
@Helsing: eso es lo que escribí, acabo de explicar por qué no había un mensaje de error a pesar de que no es válido
a_horse_with_no_name
@a_horse_with_no_name Sí, entendí mal tu propósito. También votó a favor su respuesta.
Helsing
3

Estuve en esta situación no hace mucho. En caso de que alguien más experimente esto, considerando que el símbolo del sistema muestra postgres-#que puede ejecutar el comando createdb pendiente simplemente escribiendo ;y la tecla de retorno.

Fredrick Mgbeoma
fuente
1

Crear una nueva base de datos en PostgreSQL es muy simple, ejecute este comando en Linux (ejemplo de CentOS 7):

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

Usando un terminal de nodo, tuve que ejecutar:

psql -U postgres 

[Ingresa tu contraseña]

luego ...

CREATE DATABASE dbadmin;

Lo que es confuso es que ingresé estos mismos comandos antes y no funcionó. Solo después de cerrar la sesión y volver a iniciarla, pude usar este comando estándar de la documentación: https://www.postgresql.org/docs/10/tutorial-createdb.html

EndePointe
fuente