2015-08-21 4 views
2

Проблема: я могу создавать пользователей или базы данных из оболочки (bash, OSX), но не postgres cli. Из bash я не получаю подтверждения в случае успеха.PostgreSQL не может создать пользователя

Если я пытаюсь создать CREATE ROLE в psql, тогда я не получаю ответа и не генерирует никаких ошибок. Если я попытаюсь создать createuser из bash, то в случае успеха он ничего не сообщает о возврате, если он не увенчался успехом, тогда он генерирует ошибку: «имя пользователя роли уже существует».

Example: 

Yunti-# CREATE ROLE testuser 
Yunti-# \du 
          List of roles 
Role name |     Attributes     | Member of 
-----------+------------------------------------------------+----------- 
Yunti  | Superuser, Create role, Create DB, Replication | {} 
anything |            | {} 
monkey |            | {} 

Yunti-# CREATE DATABASE testdb 
Yunti-# \l 
           List of databases 
    Name | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+-------+----------+-------------+-------------+------------------- 
Yunti  | Yunti | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 
postgres | Yunti | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 
template0 | Yunti | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/Yunti   + 
      |  |   |    |    | Yunti=CTc/Yunti 
template1 | Yunti | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/Yunti   + 
      |  |   |    |    | Yunti=CTc/Yunti 
test  | Yunti | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 
test5  | Yunti | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 
(6 rows) 

Yunti-# 

Аналогичная вещь случается при использовании createdb.

Как создать пользователей и базы данных в postgres cli? И это нормально, чтобы не получить ответа на большинство команд postgres в bash?

информация: пользователи и их привилегии:

Yunti-# \du 
          List of roles 
Role name |     Attributes     | Member of 
-----------+------------------------------------------------+----------- 
Yunti  | Superuser, Create role, Create DB, Replication | {} 
anything |            | {} 
monkey |            | {} 
+0

Как установить PostgreSQL, и из где? –

+0

Спасибо, что это было так просто, понадобилось; (должен делать меньше python и больше sql/javascript for; practice) – Yunti

ответ

6

Ваши заявления не выполняются, потому что вы не завершаете их правильно, используя ;.

Цитата from the manual:

A command is composed of a sequence of tokens, terminated by a semicolon (";").

И the manual for psql:

At the prompt, the user can type in SQL commands. Ordinarily, input lines are sent to the server when a command-terminating semicolon is reached. An end of line does not terminate a command. Thus commands can be spread over several lines for clarity. If the command was sent and executed without error, the results of the command are displayed on the screen.

Если вы сделаете это, вы получите выход, как это:

psql (9.4.4) 
Type "help" for help. 

postgres=# CREATE ROLE testuser; 
CREATE ROLE ---<<<< this tells you the statement was executed 

postgres=# 
0

Я не знаю, если клиент Postgres использует другие команды в OSX, как в Linux, но я предполагаю, что это то же самое.

Этого docs link показывает некоторые опции для клиента Postgres:

Похоже, «\ л» перечислены базами данных в то время как вариант вы хотели бы видеть в роли и их доступ, который является «\ им».

При создании базы данных изнутри клиента вы должны получить ответ в форме «СОЗДАНИЕ БАЗА ДАННЫХ». Может быть, у вас какая-то синтаксическая ошибка?

Я не думаю, что пользователи созданы в другом месте.

Надеюсь, это решает некоторые из ваших проблем.

+0

Thanks \ qu помогает подтвердить, что есть у пользователей (вы правы \ l - это базы данных). Однако у меня все еще возникают проблемы с созданием пользователей. Если я создаю пользователей из оболочки (bash) через createuser, это работает, но не дает подтверждения при создании (только при ошибке). Если я делаю это через postgres cli, createuser не работает (и не дает сообщения об ошибке) и CREATE ROLE name - тоже не работает (и не выдавать сообщение об ошибке); (Обратите внимание, что не указано значение postgres по умолчанию для роли/пользователя, упомянутое в другом месте - это только на Linux - пользователь по умолчанию на OSX, похоже, является пользователем оболочки) – Yunti

+0

Обновлен мой вопрос, чтобы быть более четким - по-прежнему нельзя создавать пользователей или базы данных одинаково выпуск на двух разных компьютерах. – Yunti

Смежные вопросы