2013-04-02 2 views
0

Я получал известныйвопрос Пароль на CREATEDB - PostgreSQL на OSX Mountain Lion

psql: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

ошибку при попытке createdb в терминале в OSX Mountain Lion, поэтому, следуя инструкциям here, я добавил export PATH=/opt/local/lib/postgresql92/bin:$PATH к моему .bash_profile и теперь, если я нахожу which psql, я получаю /opt/local/lib/postgresql92/bin/psql (где раньше я получал /usr/bin/psql).

Однако, если я пытаюсь createdb database сейчас, я получаю запрос на ввод пароля, я не знаю (это не мой пароль по умолчанию пользователя), и, если я введу это неправильно дважды, я получаю:

createdb: could not connect to database template1: 
FATAL: password authentication failed for user "username" 

где username - мое имя пользователя по умолчанию в Terminal. То, что я пытаюсь сделать, это создать базу данных PostgreSQL, с которой я могу получить доступ из проекта Django, живущего внутри виртуального. Я использую PostgreSQL 9.2. Что я делаю не так?

ответ

2

createdb должен подключиться к PostgreSQL под капотом, чтобы выполнить команду SQL, которая создаст новую базу данных. По умолчанию для этого используется ваше имя пользователя ОС. В соответствии с сообщением об ошибке происходит ошибка, потому что этот пользователь не существует в качестве пользователя базы данных (наиболее правдоподобно) или потому, что у него есть пароль, который вы не помните.

Чтобы исправить это, предполагая, что вы используете macports пакет, который кажется правдоподобным, учитывая путь установки, вы можете запустить:

sudo su postgres -c '/opt/local/lib/postgresql92/bin/createdb dbname' 

Новая база данных будет принадлежать пользователю Postgres, что не всегда идеально. Более разумный выбор должен был бы создать обычный пользователь дб с вашим именем пользователя и сделать его владельцем базы данных:

sudo su postgres -c '/opt/local/lib/postgresql92/bin/createuser username' 
sudo su postgres -c '/opt/local/lib/postgresql92/bin/createdb -O username dbname' 

EDIT: Команда createuser запрашивает эти вопросы (от страницы руководства):

 $ createuser joe 
     Shall the new role be a superuser? (y/n) n 
     Shall the new role be allowed to create databases? (y/n) n 
     Shall the new role be allowed to create more new roles? (y/n) n 

отвечая да на двух последних, новый пользователь будет иметь достаточно прав, чтобы он мог быть использован в дальнейшем до postgres до sudo, т.е. это будет работать:

createuser -U username newuser 
createdb -U username newdatabase 
+0

Спасибо за ответ, Даниэль! Есть ли способ сделать все это без необходимости использовать 'sudo' каждый раз? Например, если я создаю нового пользователя с моим именем пользователя, могу ли я просто переключиться на этого пользователя и создать базы данных таким образом? Или возникнет проблема с разрешениями каталога и т. Д.? – GChorn

+0

Кроме того, где эти команды создают базу данных? Кажется, я не могу найти его на своем компьютере. – GChorn

+1

@GChorn: см. Мое правление о createuser. Что касается базы данных, то в базе данных внутри каталога PG есть каталог, но он полностью управляется postgres, пользователю не разрешается ничего делать с этими каталогами и файлами. –

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