Проблемы с созданным в postgres - PullRequest
1 голос
/ 03 ноября 2011

Мне нужно запустить симуляцию с несколькими базами данных postgresql, расположенными на разных машинах, на которых все они работают под управлением Linux.

Я успешно скомпилировал и собрал postgresql из исходного кода, и я также могу запустить сервер, нокогда я пытаюсь создать новую базу данных с помощью этой команды:

./postgresql/bin/createdb db1

я получаю эту ошибку:

createdb: could not connect to database postgres: FATAL:  role "giulio" does not exist

где giulio - мое имя пользователя для доступа ко всем машинам.

На некоторых машинах это работает, а на других - нет.Я действительно не могу понять корень проблемы.Я полагаю, это связано с контролем доступа postgres.

Я провел несколько исследований в Google, но не смог найти и решить проблему.

Кто-нибудь знает, как получить эту работу?

Спасибо,

-Джулио

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011

PostgreSQL имеет своих собственных пользователей и роли, которые отличаются от вашей операционной системы. Обычно есть специальный супер-пользователь, postgres. Информацию об управлении пользователями смотрите здесь:

http://www.postgresql.org/docs/9.1/interactive/user-manag.html

При выполнении команд postgres вам необходимо указать пользователя с флагом -U (если вы уже не вошли в систему как существующий пользователь БД). Когда вы вызвали сценарий createb, поскольку вы не использовали флаг -U, сервер предполагал, что следует использовать uid вызывающей стороны (giulo), но вы не добавили пользователя «giulio» в базу данных, и отсюда и сообщение об ошибке.

Выполните команду как

./postgresql/bin/createdb -U postgres db1

и это должно работать. Затем, в дальнейшем, вы можете захотеть создать других пользователей и роли в вашей БД, а не делать все как суперпользователь.

1 голос
/ 09 марта 2014

Мой ответ был более простым ... Я понял, что мне нужно просто выполнить следующее:

brew install postgresql

, чтобы проверить, сработало ли это, я запустил:

which createdb 

, чтобы проверитьпуть к файлу, и если он работал, и это было!Надеюсь это поможет.

1 голос
/ 03 ноября 2011

Я бы предположил, что на машинах, где пользователь "giulio" уже известен, вы выполнили initdb, и именно этот пользователь сделал его суперпользователем БД. Цитата из inidb(1) (выделено мной):

- имя пользователя = имя пользователя Выбирает имя пользователя суперпользователя базы данных. Это по умолчанию на имя эффективного пользователя, запускающего initdb. Это действительно не важно, как зовут суперпользователя, но можно выбрать сохранить привычное имя postgres , даже если операционная система имя пользователя tem другое.

На других машинах я предполагаю, что вы выполнили initdb с другим пользователем, возможно, используя postgres.

Чтобы вернуться к стандартной дорожке, я предлагаю удалить кластер базы данных на машинах, где «giulio» является суперпользователем, и настроить новый кластер базы данных, используя стандартного пользователя postgres. Затем добавьте еще одного пользователя "giulio". Это позволит избежать путаницы в будущем, так как некоторые сценарии / программы ожидают, что учетная запись суперпользователя называется postgres.

...