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
Нет ошибок, но таблица не создается. Любые идеи?
Ответы
Ответ 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;"