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


197

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

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

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

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



4
Это очень похоже на вопрос, который был задан год спустя. Но я считаю, что у этого есть опасный первичный ответ. Вы не должны настраивать postgresпользователя. Это SUPostgreSQL, и он открывает вас для атак на логин против него. Создайте другого суперпользователя и зарезервируйте для заблокированных postgresадминистраторов UNIX права root.
Эван Кэрролл

Ответы:


329

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

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

    sudo -u postgres psql template1

  2. Установите пароль для пользователя postgres, затем выйдите из psql (Ctrl-D):

    ALTER USER postgres с зашифрованным паролем «xxxxxxx»;

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

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

    и измените «peer» на «md5» в строке, касающейся postgres:

    местный все      postgres      peer md5

    Чтобы узнать, какую версию postgresql вы используете, найдите папку с версиями в /etc/postgresql. Также вы можете использовать Nano или другой редактор вместо VIM.

  4. Перезапустите базу данных:

    sudo /etc/init.d/postgresql restart

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

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

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

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

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

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

    местный все      все      равные md5

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

    psql template1

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

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


Эта процедура прекрасно работала и в Ubuntu 13.10. Просто запомните sudo на шаге 5 при создании пользователя.
Дэвид ден Харинг


2
как примечание, строка in pg_hba.confдолжна быть первой строкой, в противном случае она может игнорироваться из-за других правил (pgsql 9.3.5 на F21). Мне потребовалось некоторое время, чтобы понять это, что некомментирование и изменение уже закомментированных строк для пользователя postgresql просто не сработает.
Дашеси

Я думаю, что это изменилось в PG 9.4, поскольку у меня есть только local all all peerпункт 3, на который я теперь изменился md5. ОК?
Лео Леопольд Герц 준영

1
Пожалуйста, обновите ответ до 2017 года! PostgreSQL 9.6 и UBUNTU 16 LTS ... Нет простого способа ??
Питер Краусс

55

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

$ psql -U postgres

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

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

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


Я работаю на Windows, я запустил initdb для моего каталога и есть файлы конфигурации. Теперь createb работает, но когда я делаю psql тест, я получаю сообщение ПРЕДУПРЕЖДЕНИЕ. Кодовая страница консоли (437) отличается от кодовой страницы Windows (1252) 8-разрядные символы могут работать неправильно. См. Psql справочную страницу "Примечания для пользователей Windows" для подробностей. и ни одна из команд не работает.
Рохит Банга

7
psql: FATAL: Peer authentication failed for user "postgres"даже с sudo.
Питер Краусс

Прекрасный ответ, я не хотел касаться файлов конфигурации, и это работало безупречно на PostgreSQL 10.10 через Ubuntu. После этого вы сможете соединиться с psql -d mydatatabase -U myuser.
Ран

21

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

su root
su postgres
psql

4
Это будет работать во многих случаях, потому что на многих сайтах pg_hba.conf аутентифицирует пользователя postgres db по системной учетной записи postgres (метод peer). Однако успешный вход будет зависеть от содержимого файла pg_hba.conf для любого конкретного сайта.
Рид Сэндберг

1
Работал на меня. Я заменил первую строку на sudo bash.
eje211

я не понимаю, как это помогает, .. из моего понимания, это регистрирует в root и postgres и запускает psql. Что именно происходит? Спасибо!
olleh

20

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

  1. Используя createuser и creatb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Использование команд администрирования 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пользователя.

  1. Обычно он заблокирован от ОС. Никто не должен «входить» в операционную систему как postgres. Вы должны иметь root, чтобы пройти аутентификацию как postgres.
  2. Обычно он не защищен паролем и делегируется операционной системе хоста. Это хорошая вещь . Обычно это означает, что для входа в систему, postgresкоторая является эквивалентом PostgreSQL SQL Server SA, необходимо иметь доступ на запись к базовым файлам данных. И это означает, что вы все равно можете разрушить хаос.
  3. Если этот параметр отключен, вы устраняете риск атаки методом грубой силы через именованного суперпользователя. Сокрытие и скрытие имени суперпользователя имеет свои преимущества.

При первом способе пользователь не получает никаких привилегий. Я закончил тем, что использовал это вместо первой команды:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert

@FabienSnauwaert -sделает пользователя суперпользователем.
Эван Кэрролл

16

РЕДАКТИРОВАТЬ: Предупреждение: Пожалуйста, прочитайте ответ, отправленный Эван Кэрролл . Похоже, что это решение не безопасно и не рекомендуется.

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

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

  1. Установите 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

Для того, чтобы:

#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
Эван Кэрролл

4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`

3

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


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

3

Если вы используете macOS, как я, у вас может не быть пользователя postgres.

При попытке запустить sudo -u postgres psqlя получаю ошибкуsudo: unknown user: postgres

К счастью, есть исполняемые файлы, которые предоставляет postgres.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Тогда я смог получить доступ psqlбез проблем.

psql
psql (10.2)
Type "help" for help.

nick=#

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

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Затем я отредактировал /var/postgres/var-10-local/postgresql.confс моим предпочтительным портом, 5433.

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

Готово!


2

В MacOS я следовал приведенным ниже шагам, чтобы заставить его работать.

Впервые после установки получите имя пользователя системы.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Теперь, когда вы вошли в систему, и вы можете создать БД.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.