Postgresql não está criando db com “createdb” como superusuário, ainda não gerando erros [duplicado]

100

Estou trabalhando com uma nova instalação do postgresql, com superusuário 'postgres'. Conectado 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

Sem erros, ainda a tabela não está sendo criada. Alguma ideia?

Damien Roche
fonte
Intimamente relacionado a stackoverflow.com/questions/8537576/…
Craig Ringer

Respostas:

208

createdbé um utilitário de linha de comando que pode ser executado no bash e não no psql. Para criar um banco de dados a partir do psql , use a create databaseinstrução assim:

create database [databasename];

Nota: certifique-se de sempre terminar suas instruções SQL com ;

Saddam Abu Ghaida
fonte
35
Obrigado, vou me dar um tapa agora. :)
Damien Roche
Certo. Pontos fáceis;) Precisa esperar 7 minutos ainda (aparentemente). Obrigado novamente.
Damien Roche
35
não se esqueça de adicionar o ponto-e-vírgula no final.;
Timothy Dalton
4
aquele semi-colin para a vitória!
Michael Dimmitt
1
Obrigado! o ponto e vírgula fez o trabalho para mim. tão pequeno, mas mudando a vida;)
sas
75

Atrasado para a festa, mas a resposta aceita não explica por que nenhum erro foi exibido. E como isso é algo que os recém-chegados do Postgres frequentemente tropeçam, eu queria acrescentar isso.


TL / TR: sempre termine suas instruções SQL com ;


Porque createdb databasenão terminou com ; psqlpensa que a instrução não foi concluída e aguarda mais entrada. Isso é indicado pelo prompt mudando de postgres=#para postgres-#. Uma mudança extremamente sutil que eu gostaria que psqlfosse feita de forma diferente (mais "proeminente").

Ao inserir o meta-comando, \lista instrução SQL "atual" é "abortada" sem executá-la.

Se o createdbtivesse terminado com um, ;a saída teria sido:

postgres => createdb foobar;
ERROR: erro de sintaxe em ou próximo a "createdb"
LINHA 1: createdb foobar;
        ^
postgres =>

Mostrando claramente que algo estava errado.

um cavalo sem nome
fonte
3
Uau, isso é sutil, mas mortal. Eu estava tendo esse problema há algum tempo. A primeira vez que você executar o comando com ponto-e-vírgula, receberá o erro porque createdbnão é válido. Mas repetir exatamente o mesmo comando com em create databasevez de createdbjunto com um ponto-e-vírgula funciona perfeitamente.
Glen Selle
1
@Helsing: foi o que escrevi, acabei de explicar por que não havia uma mensagem de erro, embora fosse inválida
a_horse_with_no_name
@a_horse_with_no_name Sim, não entendi seu propósito. Também votou positivamente em sua resposta.
Helsing
3

Eu estava nessa situação há não muito tempo. Caso outra pessoa experimente isso, considerando que o prompt de comando mostra que postgres-#você pode executar o comando createdb pendente simplesmente digitando ;e a tecla Enter.

Fredrick Mgbeoma
fonte
1

Criar uma nova base de dados no PostgreSQL é muito simples, execute este comando no Linux (exemplo CentOS 7):

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

Usando um terminal de nó, tive que executar:

psql -U postgres 

[coloque sua senha]

então ...

CREATE DATABASE dbadmin;

O que é confuso é que eu digitei esses mesmos comandos antes e não funcionou. Só depois de fazer logout e login novamente, pude usar este comando padrão da documentação: https://www.postgresql.org/docs/10/tutorial-createdb.html

EndePointe
fonte