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

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

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

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

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

11 ответов

Решение

Другие ответы не полностью удовлетворяли меня. Вот что сработало для 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

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

    sudo /etc/init.d/postgresql restart

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

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

    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> должно сработать.

Под 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, Если вы хотите иметь возможность сделать это с помощью какого-либо инструмента с графическим интерфейсом по сети - тогда вам придется возиться с pg_hba.conf,

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

  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. Если этот параметр отключен, вы устраняете риск атаки методом грубой силы через именованного суперпользователя. Сокрытие и скрытие имени суперпользователя имеет свои преимущества.

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

su root
su postgres
psql

У меня это работало в стандартной 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

В 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

Если вы используете 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

Готово!

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

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

В моем случае я не знал как первый раз зайти в postgresql, в Ubuntu 22.04 после недавней установки у меня командаsudo -u postgres psqlработал.

асцикаст

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

Другие вопросы по тегам