Как настроить postgresql в первый раз?
Я только что установил postgresql и указал пароль x во время установки. Когда я пытаюсь сделать createdb
и указать любой пароль я получаю сообщение:
createb: не удалось подключиться к базе данных postgres: FATAL: аутентификация по паролю не удалась для пользователя
То же самое для createuser
,
Как мне начать? Могу ли я добавить себя в качестве пользователя в базу данных?
11 ответов
Другие ответы не полностью удовлетворяли меня. Вот что сработало для postgresql-9.1 на Xubuntu 12.04.1 LTS.
Подключитесь к базе данных по умолчанию с помощью пользователя postgres:
sudo -u postgres psql template1
Установите пароль для пользователя postgres, затем выйдите из psql (Ctrl-D):
ALTER USER postgres с зашифрованным паролем 'xxxxxxx';
Изменить
pg_hba.conf
файл:sudo vim /etc/postgresql/9.1/main/pg_hba.conf
И измените "peer" на "md5" в строке, касающейся postgres:
местный все postgres
peermd5Перезапустите базу данных:
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" в строке, касающейся "всех" других пользователей:местный все все
равныеmd5Перезапустите (как в шаге 4) и убедитесь, что вы можете войти без -U postgres:
psql template1
Обратите внимание, что если вы делаете простой
psql
, он потерпит неудачу, поскольку попытается соединить вас с базой данных по умолчанию, имеющей то же имя, что и вы (т.е.whoami
). template1 - это база данных администратора, которая находится здесь с самого начала.Сейчас
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
,
Есть два метода, которые вы можете использовать. Оба требуют создания пользователя и базы данных.
Используя createuser и creatb,
$ sudo -u postgres createuser --superuser $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 ServerSA
Вы должны иметь доступ на запись к основным файлам данных. И это означает, что вы в любом случае можете разрушить хаос. - Если этот параметр отключен, вы устраняете риск атаки методом грубой силы через именованного суперпользователя. Сокрытие и скрытие имени суперпользователя имеет свои преимущества.
У меня это работало в стандартной 64-битной установке Ubuntu 14.04.
Я следовал инструкциям с небольшими изменениями, которые я нашел в http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html
- Установите postgreSQL (если он еще не установлен на вашем компьютере):
sudo apt-get install postgresql
- Запустите psql, используя пользователя postgres
sudo –u postgres psql postgres
- Установите новый пароль для пользователя postgres:
\password postgres
- Выход psql
\q
- Отредактируйте /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
- Перезапустите postgreSQL:
sudo service postgresql restart
- Создать новую базу данных
sudo –u postgres createdb mytestdb
- Запустите psql снова с пользователем postgres:
psql –U postgres –W
- Перечислите существующие базы данных (ваша новая база должна быть там сейчас):
\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. Это должно работать без сомнения!