Подтвердить что ты не робот

Postgresql не создает db с "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

Нет ошибок, но таблица не создается. Любые идеи?

4b9b3361

Ответ 1

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

create database [databasename];

Примечание. Обязательно всегда завершайте свои операторы SQL с помощью ;

Ответ 2

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


TL/TR: всегда заканчивайте свои SQL-выражения с помощью ;


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

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

Если createdb закончил с ;, выход был бы:

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

Очевидно, что что-то не так.

Ответ 3

Я был в этой ситуации не так давно. В случае, если кто-то еще испытывает это, учитывая, что в командной строке отображается postgres-#, вы можете выполнить ожидающую команду createb, просто набрав ; и клавишу возврата.

Ответ 4

Создать новую базу данных в PostgreSQL очень просто, выполните эту команду в Linux (пример CentOS 7):

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