2012-11-10 5 views
45

Pracuję ze świeżą instalacją postgresql, z superużytkownikiem "postgres". Zalogowany przez:Postgresql nie tworzy db z "createdb" jako superużytkownikiem, ale nie wypisuje błędów

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 

Brak błędów, ale tabela nie jest tworzona. Jakieś pomysły?

+0

Ściśle związane z http://stackoverflow.com/questions/8537576/what-is-wrong-with-this-postgresql-query –

Odpowiedz

97

createdb to narzędzie linii poleceń, które można uruchomić z bash a nie z psql. Aby utworzyć bazę danych z psql, należy użyć instrukcji create database tak:

create database [databasename]; 

Uwaga: należy zawsze zakończyć SQL z ;

+16

Dzięki, policzę się teraz. :) –

+0

możesz oznaczyć to pytanie jako odpowiedziano :) –

+0

Pewnie. Łatwe punkty;) Trzeba jeszcze poczekać 7 minut (podobno). Dzięki jeszcze raz. –

39

późno na imprezie, ale przyjęte rozwiązanie nie robi wyjaśnić, dlaczego nie wyświetla się żaden błąd. A ponieważ jest to coś, na co często natrafiają nowicjusze z Postgres, chciałem to dodać.


TL/TR: zawsze kończy swoje SQL z ;


Ponieważ createdb database nie kończą ;psql uważa, że ​​oświadczenie nie jest gotowy i czeka na więcej danych wejściowych. Jest to sygnalizowane przez zmianę z postgres=# na postgres-#. Niezwykle subtelna zmiana, którą chciałabym, aby psql zrobiłaby inaczej (bardziej "wybitna").

Po wprowadzeniu meta-polecenia \list "aktualna" instrukcja SQL jest "przerywana" bez jej wykonywania.

Jeśli createdb zostały zakończone z ; wyjście byłoby:

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

pokazuje, że coś było nie tak.

+2

Wow, to naprawdę subtelne, ale śmiertelne. Miałem ten problem od dłuższego czasu. Przy pierwszym uruchomieniu polecenia średnikiem otrzymasz komunikat o błędzie, ponieważ "createdb" jest nieprawidłowe. Ale wtedy powtarzanie dokładnie tego samego polecenia z 'create database' zamiast' createdb' wraz ze średnikiem działa doskonale. –

Powiązane problemy