2012-11-10 26 views
45

新しいpostgresqlをインストールしていて、 "postgres"スーパーユーザーで作業しています。ログイン:PostgreSQLは "createdb"をスーパーユーザーとしてdbを作成していませんが、エラーは出力しません。

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 

エラーは発生していませんが、テーブルは作成されていません。何か案は?

+0

http://stackoverflow.com/questions/8537576/what-is-wrong-with-this-postgresql-queryに密接に関連しています –

答えて

97

createdbは、bashから実行でき、psqlでは実行できないコマンドラインユーティリティです。

create database [databasename]; 

注:常に後期パーティーに;

+16

ありがとう、私は今自分を叩きます。 :) –

+0

あなたはこの質問に回答としてマークすることができます:) –

+0

確かに。簡単なポイント;)まだ(明らかに)7分待つ必要があります。再度、感謝します。 –

39

を使用してSQL文を終了するようにしてください、しかし、受け入れ答えdoesnのそのようなcreate database文を使用し、PSQLからデータベースを作成するには なぜエラーが表示されないのか説明してください。そして、これはPostgresの新規参入者がしばしば遭遇するものなので、私はそれを追加したかったのです。


TL/TR:createdb database;psqlで終わっていなかったことは文が終了していないと、複数の入力を待って考えているので、常に;


を使用してSQL文を終了します。これは、プロンプトがpostgres=#からpostgres-#に変更されることによって示されます。私がpsqlを望む非常に微妙な変更は、異なった(もっと "顕著な")でしょう。

メタコマンド\listを入力すると、「現在の」SQL文は実行されずに「中止」されます。

createdb;で終了された場合は出力がされているでしょう:

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

は明らかに何かが間違っていたことを示します。

+2

うわー、これは本当に微妙ですが、致命的です。私はかなりの間この問題を抱えていました。最初にセミコロンでコマンドを実行すると、 'createdb'が無効なのでエラーが発生します。しかし、セミコロンと一緒に 'createdb'の代わりに' create database'を使ってまったく同じコマンドを繰り返すことは完全に機能します。 –

関連する問題