web-dev-qa-db-ja.com

Postgresqlがスーパーユーザーとして「createdb」でdbを作成しないが、エラーを出力しない

「postgres」スーパーユーザーを使用して、postgresqlの新規インストールを行っています。経由でログイン:

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

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

81
Damien Roche

createdbは、psqlではなくbashから実行できるコマンドラインユーティリティです。 psqlからデータベースを作成するには、次のようにcreate databaseステートメントを使用します。

create database [databasename];

注:必ず;でSQLステートメントを終了してください

162

パーティーに遅れましたが、受け入れられた答えは、エラーが表示されない理由を説明していません。これはPostgresの新規参入者がよく遭遇するものなので、追加したいと思いました。


TL/TR:SQLステートメントは常に;で終了します


createdb database;で終わっていなかったため、psqlはステートメントが終了していないと判断し、さらに入力を待ちます。これは、プロンプトがpostgres=#からpostgres-#に変わることで示されます。 psqlが望んでいる非常に微妙な変更は、別の方法で(より「顕著な」)行われることを望みます。

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

createdb;で終了した場合、出力は次のようになります。

postgres => createdb foobar; 
エラー:「createdb」またはその近くの構文エラー
 LINE 1:createdb foobar; 
 ^ 
 postgres =>

何かが間違っていたことを明確に示す。

59

私はこの状況に少し前までいました。コマンドプロンプトにpostgres-#と表示されることを考慮して、他の誰かがこれを経験した場合は、;とリターンキーを入力するだけで保留中のcreatedbコマンドを実行できます。

2