Postgresql не создает БД с" createdb " в качестве суперпользователя, но не выводит ошибок

Я работаю со свежей установкой postgresql, с супер-пользователем "postgres". Войти через:

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

нет ошибок, но таблица не создается. Есть идеи?

2 ответов


createdb - это утилита командной строки, которую вы можете запустить из Баш и не из psql. Чтобы создать базу данных из psql в используйте create database утверждение так:

create database [databasename];

Примечание: обязательно всегда заканчивайте свои SQL-операторы с ;


поздно на вечеринку, но принятый ответ не объясняет, почему не отображается ошибка. И поскольку это то, на что часто натыкаются новички Postgres, я хотел бы добавить это.


TL / TR: всегда заканчивайте операторы SQL с ;


потому что createdb database не заканчивается ; psql думает, что оператор не закончен и ждет большего ввода. Об этом свидетельствует быстрое изменение от postgres=# to postgres-#. Весьма тонкое изменить, что я желаю psql сделал бы по-другому (более "видным").

введя мета-команду \list "текущая" инструкция SQL "прерывается" без ее выполнения.

если createdb была прекращена с ; вывод был бы:

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

ясно показывая, что что-то случилось.