Как настроить postgresql в первый раз?

142

Я только что установил postgresql, и я указал пароль x во время установки. Когда я пытаюсь сделать createdb и указать любой пароль, я получаю сообщение:

createdb: не удалось подключиться к postgres базы данных: FATAL: аутентификация пароля для пользователя

То же самое для createuser.

Как мне начать? Могу ли я добавить себя в качестве пользователя в базу данных?

Теги:
database
configuration

7 ответов

259
Лучший ответ

Другие ответы не полностью удовлетворяли меня. Вот что работало для postgresql-9.1 на Xubuntu 12.04.1 LTS.

  • Подключитесь к базе данных по умолчанию с помощью postgres пользователя:

    sudo -u postgres psql template1

  • Задайте пароль для пользовательских postgres, затем выйдите из psql (Ctrl-D):

    ПОЛЬЗОВАТЕЛИ postgres с зашифрованным паролем 'xxxxxxx';

  • Отредактируйте файл pg_hba.conf:

    sudo vim/etc/postgresql/9.1/main/pg_hba.conf

    И измените "peer" на "md5" в строке относительно postgres:

    локальный       все     Postgres     <удаp > равныйудар > md5

  • Перезагрузите базу данных:

    sudo/etc/init.d/postgresql restart

    (Здесь вы можете проверить его работу с psql -U postgres.)

  • Создайте пользователя с тем же именем, что и вы (чтобы найти его, вы можете ввести whoami):

    createuser -U postgres -d -e -E -l -P -r -s <my_name>

    Параметры говорят postgresql о создании пользователя, который может войти в систему, создавать базы данных, создавать новые роли, является суперпользователем и будет иметь зашифрованный пароль. Действительно важными являются -P -E, поэтому вас попросят ввести пароль, который будет зашифрован, и -d, чтобы вы могли сделать createdb.

    Остерегайтесь паролей. Сначала он дважды запрашивает у вас новый пароль (для нового пользователя), а затем после пароля postgres (тот, который указан на шаге 2).

  • Снова отредактируйте файл pg_hba.conf (см. шаг 3 выше) и измените "peer" на "md5" в строке, касающейся "всех" других пользователей:

    локальный       все     все     <удаp > равногоудар > md5

  • Перезагрузите (как на шаге 4) и убедитесь, что вы можете войти в систему без -U postgres:

    psql template1

    Обратите внимание, что если вы делаете простой psql, он будет терпеть неудачу, так как он попытается подключить вас к базе данных по умолчанию, имеющей то же имя, что и вы (т.е. whoami). template1 - это база данных admin, которая находится здесь с самого начала.

  • Теперь createdb <dbname> должен работать.

  • 0
    Эта процедура прекрасно работала и в Ubuntu 13.10. Просто запомните sudo на шаге 5 при создании пользователя.
  • 2
    Отлично работал и на Ubuntu 14.04 LTS
Показать ещё 6 комментариев
47

В Linux PostgresQL обычно настраивается так, чтобы позволить пользователю root войти в качестве суперпользователя postgres postgres из оболочки (консоли или ssh).

$ psql -U postgres

Затем вы просто создадите новую базу данных, как обычно:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

Это должно работать, не касаясь pg_hba.conf. Если вы хотите, чтобы это можно было использовать с помощью какого-либо инструмента GUI через сеть, тогда вам нужно будет возиться с pg_hba.conf.

  • 0
    Я работаю на Windows, я запустил initdb для моего каталога и есть файлы конфигурации. Теперь createb работает, но когда я делаю psql тест, я получаю сообщение ПРЕДУПРЕЖДЕНИЕ. Кодовая страница консоли (437) отличается от кодовой страницы Windows (1252) 8-разрядные символы могут работать неправильно. См. Psql справочную страницу "Примечания для пользователей Windows" для подробностей. и ни одна из команд не работает.
  • 4
    psql: FATAL: Peer authentication failed for user "postgres" даже с sudo.
17

Это мое решение:

su root
su postgres
psql
  • 3
    Это будет работать во многих случаях, потому что на многих сайтах pg_hba.conf аутентифицирует пользователя postgres db по системной учетной записи postgres (метод peer). Однако успешный вход в систему будет зависеть от содержимого файла pg_hba.conf для любого конкретного сайта.
  • 1
    Работал на меня. Я заменил первую строку на sudo bash .
Показать ещё 1 комментарий
11

Это работало для меня в стандартной установке Ubuntu 14.04 64 бит.

Я выполнил инструкции с небольшими изменениями, которые я нашел в http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  • Установите postgreSQL (если еще не на вашем компьютере):

sudo apt-get install postgresql

  1. Запустите psql с помощью пользователя postgres

sudo –u postgres psql postgres

  1. Установите новый пароль для пользователя postgres:

\password postgres

  1. Выход psql

\q

  1. Изменить /etc/postgresql/9.3/main/pg_hba.conf и изменить:

#Database administrative login by Unix domain socket local all postgres peer

To:

#Database administrative login by Unix domain socket local all postgres md5

  1. Перезапустить postgreSQL:

sudo service postgresql restart

  1. Создать новую базу данных

sudo –u postgres createdb mytestdb

  1. Запустите psql с пользователем postgres еще раз:

psql –U postgres –W

  1. Перечислите существующие базы данных (ваша новая база данных должна быть там сейчас):

\l

  • 1
    Я отказался от голосования, потому что считаю активацию пользователя postgres плохой идеей. stackoverflow.com/a/41604969/124486
  • 0
    @ Эван-Кэрролл Я отредактировал ответ, указывающий на твой.
6

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

  • Использование createuser и createdb,

    $ sudo -u postgres createuser -s $USER
    $ createdb mydatabase
    $ psql -d mydatabase
    
  • Использование команд администрирования SQL и подключение с паролем через TCP

    $ sudo -u postgres psql postgres
    

    И затем в оболочке psql

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;
    

    Затем вы можете войти в систему,

    $ psql -h localhost -d mydatabase -U myuser -p <port>
    

    Если вы не знаете порт, вы всегда можете получить его, запустив в качестве пользователя postgres следующее:

    SHOW port;
    

    Или

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf
    

Sidenote: пользователь postgres

Я предлагаю НЕ модифицировать пользователя postgres.

  • Обычно он заблокирован от ОС. Никто не должен "войти" в операционную систему как postgres. У вас должен быть root, чтобы получить аутентификацию как postgres.
  • Обычно он не защищен паролем и не делегирует серверу хоста. Это хорошая вещь. Обычно это означает, что для входа в систему postgres, который является эквивалентом PostgreSQL SQL Server SA, вы должны иметь доступ на запись к базовым файлам данных. И это означает, что в любом случае вы могли бы повредить хаос.
  • Если этот параметр отключен, вы удаляете риск атаки грубой силы через именованного суперпользователя. Скрывать и скрывать имя суперпользователя имеет свои преимущества.
  • 0
    При первом способе пользователь не получает никаких привилегий. В итоге я использовал это вместо первой команды: sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
  • 0
    @FabienSnauwaert -s делает пользователя суперпользователем.
2

Вероятно, вам необходимо обновить файл pg_hba.conf. Этот файл управляет тем, что пользователи могут входить в систему с IP-адресов. Я думаю, что пользователь postgres по умолчанию заблокирован.

  • 2
    Для RHEL6.4 и postgres 8.4 файл находился в /var/lib/pgsql/data/pg_hba.conf . Измените ident на trust для hostlocal если вы используете SSH).
0

Просто перейдите к каталогу установки и выполните этот файл "pg_env.bat", поэтому перейдите в папку bin и выполните pgAdmin.exe. Это не должно сомневаться!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню