Postgresql non crea il database con "createdb" come superutente, ma non genera errori [duplicato]


100

Sto lavorando con una nuova installazione di postgresql, con il super utente "postgres". Accesso tramite:

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

Nessun errore, ma la tabella non è stata creata. Qualche idea?


Risposte:


208

createdbè un'utilità della riga di comando che puoi eseguire da bash e non da psql. Per creare un database da psql , usa l' create databaseistruzione in questo modo:

create database [databasename];

Nota: assicurati di terminare sempre le tue istruzioni SQL con ;


35
Grazie, adesso mi prenderò uno schiaffo. :)
Damien Roche

Sicuro. Punti facili;) Bisogna aspettare ancora 7 minuti (apparentemente). Grazie ancora.
Damien Roche

35
non dimenticare di aggiungere il punto e virgola alla fine ..;
Timothy Dalton

4
quel semi-colin per la vittoria!
Michael Dimmitt il

1
Grazie! il punto e virgola ha fatto il lavoro per me. così piccolo ma che cambia la vita;)
sas

75

In ritardo alla festa, ma la risposta accettata non spiega perché non viene visualizzato alcun errore. E poiché questo è qualcosa in cui i nuovi arrivati ​​di Postgres spesso si imbattono, volevo aggiungerlo.


TL / TR: termina sempre le tue istruzioni SQL con ;


Poiché createdb databasenon finisce con, ; psqlpensa che l'istruzione non sia finita e attende ulteriori input. Ciò è indicato dal prompt che cambia da postgres=#a postgres-#. Un cambiamento estremamente sottile che vorrei psqlfare in modo diverso (più "prominente").

Inserendo il meta-comando, \listl'istruzione SQL "corrente" viene "interrotta" senza eseguirla.

Se createdbfosse terminato con a ;l'output sarebbe stato:

postgres => createdb foobar;
ERRORE: errore di sintassi in corrispondenza o vicino a "createdb"
LINEA 1: createdb foobar;
        ^
postgres =>

Mostrando chiaramente che qualcosa non andava.


3
Wow, questo è davvero sottile ma mortale. Ho avuto questo problema per un bel po 'di tempo. La prima volta che esegui il comando con un punto e virgola riceverai l'errore perché createdbnon è valido. Ma poi ripetere lo stesso identico comando con create databaseinvece che createdbinsieme a un punto e virgola funziona perfettamente.
Glen Selle

1
@Helsing: è quello che ho scritto, ho solo spiegato perché non c'era un messaggio di errore anche se non è valido
a_horse_with_no_name

@a_horse_with_no_name Sì, ho frainteso il tuo scopo. Ho votato anche la tua risposta.
Helsing

3

Ero in questa situazione non molto tempo fa. Nel caso in cui qualcun altro lo provi, considerando che il prompt dei comandi mostra postgres-#che puoi eseguire il comando createdb in sospeso semplicemente digitando ;e il tasto di ritorno.


1

Creare un nuovo database in PostgreSQL è molto semplice, esegui questo comando su Linux (esempio CentOS 7):

sudo -u postgres psql -c "create database MyDb;"

0

Utilizzando un nodo terminale, ho dovuto eseguire:

psql -U postgres 

[Inserisci la tua password]

poi ...

CREATE DATABASE dbadmin;

Ciò che è fonte di confusione è che ho inserito questi stessi comandi prima e non ha funzionato. Solo dopo essermi disconnesso e aver effettuato nuovamente l'accesso, sono stato in grado di utilizzare questo comando standard dalla documentazione: https://www.postgresql.org/docs/10/tutorial-createdb.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.