Получение ошибки: не удалось выполнить аутентификацию однорангового узла для пользователя "postgres" при попытке заставить pgsql работать с рельсами.

avatar
orderof1
6 сентября 2013 в 18:15
854503
25
944

Я получаю сообщение об ошибке:

FATAL: Peer authentication failed for user "postgres"

когда я пытаюсь заставить postgres работать с Rails.

Вот мой pg_hba.conf, мой database.yml и дамп полной трассировки <556313552063981330>.

Я изменил аутентификацию на md5 в pg_hba и пробовал разные вещи, но, похоже, ни одна из них не работает.

Я также попытался создать нового пользователя и базу данных согласно Rails 3.2, FATAL: не удалось выполнить аутентификацию однорангового узла для пользователя (PG :: Error)

Но они не отображаются ни в pgadmin, ни даже когда я запускаю sudo -u postgres psql -l.

Есть идеи, где я ошибаюсь?

Источник
MrYoshiji
6 сентября 2013 в 18:19
1

1): Убедитесь, что у вас есть пользователь с именем postgres, созданный и имеющий права на вашу базу данных 2): Убедитесь, что у него есть пароль 3): Убедитесь, что ваш config / database.yml содержит учетные данные прав (имя пользователя + пароль)

Artem.Borysov
28 июля 2015 в 08:55
2

нужно везде одноранговый узел и отступ установить на md5

uvsmtid
26 августа 2015 в 07:13
21

См. Также этот ответ - соединение может не удастся на localhost, но успешно на 127.0.0.1.

Mihail Velikov
16 марта 2016 в 06:50
11

В моем случае мне нужно было добавить host: localhost в файл database.yml.

Sudip Bhandari
25 апреля 2017 в 10:35
0

эта ссылка помогла мне suite.opengeo.org/docs/latest/dataadmin/pgGettingStarted/…

Collin
5 сентября 2019 в 22:20
0

Я исправил эту ошибку, добавив --host=localhost, который я считал значением по умолчанию

Gaurav Patil
17 августа 2021 в 04:28
0

Обратитесь к этому для postgres ошибки аутентификации Ссылка

Ответы (25)

avatar
Marcelo De Polli
6 сентября 2013 в 18:25
1267

Проблема все еще в вашем pg_hba.conf файле *.

Эта строка:

local   all             postgres                                peer

Должно быть:

local   all             postgres                                md5

* Местоположение этого файла не очень согласовано. Команда locate pg_hba.conf должна помочь; вот несколько примеров: /etc/postgresql/*/main/pg_hba.conf и /var/lib/pgsql/data/pg_hba.conf.

После изменения этого файла не забудьте перезапустить сервер PostgreSQL. Если вы работаете в Linux, это будет sudo service postgresql restart.

Это краткое описание обоих вариантов согласно официальной документации PostgreSQL по методам аутентификации.

Одноранговая аутентификация

Метод одноранговой аутентификации работает путем получения клиентского имя пользователя операционной системы из ядра и использование его в качестве разрешенного имя пользователя базы данных (с необязательным отображением имени пользователя). Этот метод поддерживается только при локальных подключениях.

Парольная аутентификация

Методы аутентификации на основе пароля: md5 и пароль. Эти методы работают аналогично, за исключением способа отправки пароля через соединение, а именно MD5-хеширование и открытый текст соответственно.

Если вас беспокоят атаки "сниффинга" паролей, тогда md5 является предпочтительным. По возможности всегда следует избегать использования простого пароля. Однако md5 нельзя использовать с функцией db_user_namespace. Если соединение защищено шифрованием SSL, можно использовать пароль безопасно (хотя проверка подлинности сертификата SSL может быть лучшим выбором если зависит от использования SSL).

Пример местоположения для pg_hba.conf:
/etc/postgresql/9.1/main/pg_hba.conf

funkotron
28 октября 2013 в 13:50
65

Вам нужно будет перезагрузить службу postgresql после изменения этого /etc/init.d/postgresql reload

Doug
30 января 2014 в 21:08
83

поместив это здесь, так как я всегда забываю, где этот файл /etc/postgresql/9.1/main/pg_hba.conf

Marnen Laibow-Koser
21 марта 2014 в 17:47
16

@funkotron По крайней мере, в моей установке ElementaryOS (Ubuntu) sudo service postgreql restart тоже работает.

Dennis
28 марта 2014 в 15:05
1

Что именно делает это изменение? Я не хочу слепо вносить изменения в надежде, что это сработает.

Dennis
28 марта 2014 в 15:17
17

Чтобы ответить на мой собственный вопрос: «одноранговая» аутентификация означает, что postgres запрашивает у операционной системы ваше имя для входа и использует его для аутентификации, поэтому пользователь в ОС и в postgres должен быть одним и тем же. 'md5' использует аутентификацию с зашифрованным паролем.

Victor Marconi
13 июня 2015 в 19:31
11

Я понимаю изменение. Но почему это не поведение по умолчанию? Есть ли недостаток в использовании md5?

Abdull
3 мая 2016 в 16:45
3

Убедитесь, что ваше правило предоставления помещено перед любым другим совпадающим, но запрещающим правилом в pg_hba.conf. Как указано в документации PostgreSQL 9.3 на pg_hba.conf: « Первая запись с совпадающим типом соединения, адресом клиента, запрошенной базой данных и именем пользователя используется для аутентификации. Нет" fall-through "или" backup ": если выбрана одна запись и аутентификация не удалась, последующие записи не рассматриваются. "

botheredbybees
2 декабря 2016 в 02:29
5

в CentOS 6.5 я нашел этот файл в /var/lib/pgsql/9.1/data

Peter Krauss
20 июня 2017 в 11:04
1

Привет, не работает на UBUNTU 16 LTS с pg9.5 ... У вас есть полные pg_hba.conf и postgresql.conf скрипты , адаптированные к этому env и разрешениям? Мне нужно использовать (в терминале ssh на сервере) PGPASSWORD=postgres psql -U postgres.

ng10
25 февраля 2018 в 20:54
4

ответ ниже Arivarasan с правками Артема на самом деле лучше. это решение выше не сработало, по крайней мере, для меня (элементарная ОС). См. Эту ссылку на ответ службы поддержки Postgres, в котором в основном говорится то же самое. вам нужно сначала заменить «peer» на «trust», а затем изменить его на «md5»

Valachio
2 мая 2018 в 17:35
1

Ухх он просит пароль после перехода на md5 ... какой пароль?

mirek
3 мая 2018 в 12:06
1

>> Valachio: я установил пароль для пользователя postgres так: 1. su, 2. su - postgres, 3. psql (или psql -p <port>), 4. \ password, 5. \ q

Nam G VU
4 мая 2018 в 08:47
0

@ ng10 правильный. Нам нужно сначала разобраться с пользователем по умолчанию postgres, установив метод на trust как coderhelper.com/a/26735105/248616

WTIFS
11 мая 2018 в 13:10
0

У меня даже нет postgresql в / etc

kmonsoor
14 июня 2018 в 00:37
0

в CentOS 7, Amazon Linux этот файл конфигурации находится здесь: /var/lib/pgsql/9.6/data/pg_hba.conf

Peter Krauss
16 июля 2018 в 02:30
0

Обновление для любой версии :, чтобы проверить файл conf: sudo -u postgres psql -c "SHOW config_file"

Qortex
17 мая 2019 в 18:46
2

Работает в Fedora, pg_hba.conf находится в /var/lib/pgsql/data

Joel Coehoorn
25 сентября 2019 в 19:35
1

Пожалуйста, скажите мне, что параметр "md5" на самом деле не использует md5, который полностью не работает для паролей.

Shomaail
6 мая 2020 в 10:08
0

обязательно используйте эту ссылку ubuntu.com/server/docs/databases-postgresql

Doug
7 июля 2020 в 16:22
0

sed скрипт для автоматической замены этого: sudo sed -i 's/local all postgres peer/local all postgres md5/' pg_hba.conf

Mohammad Reza
19 октября 2020 в 07:44
0

У меня postgresql V12 на Centos 7. pg_hba.conf существует на '/var/lib/pgsql/12/data/pg_hba.conf'. для перезапуска postgres следует использовать sudo systemctl restart postgresql-12 althou

Farid Chowdhury
7 апреля 2021 в 11:11
0

После применения этого решения перезапустите postgres с помощью следующей команды: sudo service postgresql restart

questionto42
14 сентября 2021 в 20:53
0

Переход на md5 - это всего лишь один шаг - такие настройки дают понять, что pw является методом аутентификации. Очевидно, что если у вас еще не установлен пароль для вашего суперпользователя, вам все равно нужно дать этому суперпользователю пароль. Команда ALTER не может этого сделать в такой ситуации, если ваш pg_hba.conf не установлен на trust. Поэтому вместо этого вам нужны (кредиты на комментарий @mirek): sudo su postgres, psql *(or psql -p <port> if you have more than one PostgreSQL)*, \password, \q

Vivek
5 октября 2021 в 09:53
0

Чтобы проверить расположение pg_hba.conf, подключитесь к базе данных postgres с помощью psql, затем введите команду SHOW hba_file;.

avatar
Singh
29 ноября 2021 в 18:58
2

В моем случае я даже не смог отредактировать или просмотреть содержимое файла pg_hba.conf.

Что сработало:

/etc/postgresql/14/main$ sudo vi pg_hba.conf

Редактор Vi с разрешением sudo.

avatar
Ravi Kumar Gupta
23 июня 2021 в 12:46
1

В CentOS 7, PG 10 путь к файлу:

/var/lib/pgsql/10/data/pg_hba.conf
avatar
alramdein
10 марта 2021 в 14:44
5

Большинство решений предлагают отредактировать pg_hba.conf.

Если вы не хотите редактировать файл конфигурации, вам просто нужно войти в систему под пользователем postgres. Если вы используете / на сервере Linux, используйте эту команду

sudo -i -u postgres

Он создаст пользователя postgres, а затем войдет в него. Теперь попробуйте снова выполнить команду psql.

Вы также можете добавить postgres пользователю пароль с помощью команды: (вы должны быть пользователем root)

passwd postgres

Это работает, потому что согласно этой документации PostgreSQL,

Одноранговая аутентификация

Метод одноранговой аутентификации работает путем получения клиентского имя пользователя операционной системы из ядра и использование его в качестве разрешенного имя пользователя базы данных (с необязательным отображением имени пользователя). Этот метод поддерживается только при локальных подключениях.

mydoghasworms
8 апреля 2021 в 05:32
0

Для людей, просто желающих изначально сбросить пароль postgres, это лучший метод.

avatar
Saranga kapilarathna
27 ноября 2020 в 10:22
5

Выполните следующие шаги

1). Сначала перейдите в каталог / etc / postgresql / {your pg version} / main.

Моя версия 10 Тогда:

cd /etc/postgresql/10/main

2). Здесь находится файл pg_hba.conf, который должен внести некоторые изменения, здесь вам могут понадобиться доступ sudo для этого.

sudo nano pg_hba.conf

3). Прокрутите файл вниз, пока не найдете это -

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

4). Здесь измените одноранговый узел на md5 следующим образом.

# Database administrative login by Unix domain socket
local   all             all                                md5
  • одноранговый узел означает, что он будет доверять подлинности пользователя UNIX, следовательно, не

  • запрос пароля. md5 означает, что он всегда будет запрашивать пароль, и проверьте его после хеширования с помощью MD5.

5). Теперь сохраните файл и перезапустите сервер Postgres.

sudo service postgresql restart

Теперь все должно быть в порядке.

avatar
Rokas Lakštauskas
17 апреля 2020 в 13:18
17

Простейшее решение без изменения конфигов. (убунту) Смените пользователя, затем подключитесь к клиенту базы данных.

sudo -i -u postgres

psql

взято из https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04

avatar
tayfun Kılıç
10 сентября 2019 в 05:58
4

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

pg_hba.conf может появляться во многих других местах в зависимости от того, как был установлен Pg. Стандартное расположение - pg_hba.conf в каталоге data_directory базы данных (который может находиться в / home, / var / lib / pgsql, / var / lib / postgresql / [version] /, / opt / postgres / и т. Д. И т. Д.) но пользователи и упаковщики могут положить его где угодно. К сожалению.

Единственный допустимый способ найти pg_hba.conf - это спросить у работающего экземпляра PostgreSQL, где находится pg_hba.conf, или спросить системного администратора, где он находится. Вы даже не можете полагаться на то, чтобы спросить, где находится datadir, и проанализировать postgresql.conf, потому что сценарий инициализации может передать такой параметр, как -c hba_file = / some / other / path при запуске Pg.

Вы хотите спросить PostgreSQL:

SHOW hba_file;

Эта команда должна запускаться в сеансе суперпользователя, поэтому для сценария оболочки вы можете написать что-то вроде:

psql -t -P format=unaligned -c 'show hba_file';

и установите переменные среды PGUSER, PGDATABASE и т. Д., Чтобы убедиться в правильности соединения.

Да, это своего рода проблема курицы и яйца: если пользователь не может подключиться (скажем, после неудачного редактирования pg_hba.conf), вы не можете найти pg_hba.conf, чтобы исправить это. .

Другой вариант - посмотреть на вывод команды ps и увидеть, отображается ли там аргумент каталога данных postmaster -D, например,

ps aux  | grep 'postgres *-D'

, поскольку pg_hba.conf будет находиться внутри каталога данных (если вы не используете Debian / Ubuntu или какую-либо производную версию и не используете их пакеты).

Если вы ориентируетесь конкретно на системы Ubuntu с установленным PostgreSQL из пакетов Debian / Ubuntu, это становится немного проще. Вам не нужно иметь дело с вручную скомпилированным из исходного кода Pg, для которого кто-то initdb установил каталог данных в своем домашнем каталоге, или с EnterpriseDB Pg, установленным в / opt и т. Д. Вы можете спросить pg_wrapper, Debian / Ubuntu multi -version Pg manager, где PostgreSQL использует команду pg_lsclusters из pg_wrapper.

Если вы не можете подключиться (Pg не запущен или вам нужно отредактировать pg_hba.conf для подключения), вам придется поискать в системе файлы pg_hba.conf. На Mac и Linux подойдет что-то вроде sudo find / -type f -name pg_hba.conf. Затем проверьте файл PG_VERSION в том же каталоге, чтобы убедиться, что это правильная версия PostgreSQL, если у вас их несколько. (Если pg_hba.conf находится в / etc /, игнорируйте это, вместо этого это имя родительского каталога). Если у вас есть несколько каталогов данных для одной и той же версии PostgreSQL, вам нужно будет посмотреть размер базы данных, проверить командную строку запущенного postgres из ps, чтобы узнать, совпадает ли он с аргументом -D каталога данных с тем, где вы редактируете, и т. Д. . https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711

Giuseppe Schembri
2 августа 2020 в 17:42
1

Kılıç tahnks SHOW hba_file; спас мой день

tayfun Kılıç
5 августа 2020 в 07:24
0

Шембри, я счастлив, если я помог

avatar
Gihan Gamage
19 февраля 2019 в 09:43
26
sudo psql --host=localhost --dbname=database-name --username=postgres

Это решило мою проблему

Hayden Thring
11 июля 2019 в 00:47
3

Я не думал, что это будет так просто, но у меня это работало под debian 9

avatar
Mani
23 марта 2018 в 10:08
2

Если вы столкнулись с этой проблемой с рельсами и знаете, что уже создали это имя пользователя с паролем и правильными правами, вам просто нужно поместить следующее в конец файла database.yml.

host: localhost

общий файл будет выглядеть так, как показано ниже

development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  host: localhost

Вам вообще не нужно прикасаться к вашему файлу pg_hba.conf. Счастливое кодирование

avatar
Marshall
29 января 2018 в 19:17
2

Если вы пытаетесь найти этот файл в Cloud 9, вы можете сделать

sudo vim /var/lib/pgsql9/data/pg_hba.conf

Нажмите I для редактирования / вставки, нажмите ESC 3 раза и введите :wq, чтобы сохранить файл и выйти из

avatar
Epsilon47
12 января 2018 в 12:25
2

Моя проблема заключалась в том, что я не вводил никакой сервер. Я думал, что это значение по умолчанию из-за заполнителя, но когда я набрал localhost, он сработал.

avatar
iamuser2
10 января 2018 в 07:39
85

У меня это сработало !!

sudo -u postgres psql
Abubacker Siddik
1 ноября 2018 в 14:24
4

это должно работать нормально, пока ваш текущий зарегистрированный пользователь находится в файле sudoers.

Santosh Kumar
31 марта 2021 в 06:30
1

Это должен быть лучший ответ на вопрос.

avatar
Bill
20 ноября 2017 в 20:34
3

Многие другие ответы относятся к настройкам в различных файлах конфигурации, а ответы, относящиеся к pg_hba.conf, применимы и на 100% верны. Однако убедитесь, что вы изменяете правильные файлы конфигурации .

Как уже упоминалось, расположение файла конфигурации может быть переопределено различными настройками внутри основного файла конфигурации, а также путем указания пути к основному файлу конфигурации в командной строке с помощью параметра -D.

Вы можете использовать следующую команду во время сеанса psql, чтобы показать, где читаются ваши файлы конфигурации (при условии, что вы можете запустить psql). Это всего лишь шаг по устранению неполадок, который может помочь некоторым людям:

select * from pg_settings where setting~'pgsql';  

Вы также должны убедиться, что домашний каталог для вашего пользователя postgres находится там, где вы ожидаете. Я говорю это, потому что это довольно легко упустить из виду, потому что в вашем приглашении будет отображаться «~» вместо фактического пути к вашему домашнему каталогу, что делает его не таким очевидным. Во многих установках домашний каталог пользователя postgres по умолчанию равен /var/lib/pgsql.

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

usermod -d /path/pgsql postgres

Наконец, убедитесь, что ваша переменная PGDATA установлена ​​правильно, набрав echo $PGDATA, что должно вывести что-то вроде:

/path/pgsql/data

Если он не установлен или показывает что-то отличное от ожидаемого, проверьте файлы автозагрузки или RC, такие как .profile или .bash.rc - это будет сильно различаться в зависимости от вашей ОС и вашей оболочки. После того, как вы определили правильный сценарий запуска для вашего компьютера, вы можете вставить следующее:

export PGDATA=/path/pgsql/data

Для моей системы я поместил это в /etc/profile.d/profile.local.sh, чтобы он был доступен для всех пользователей.

Теперь вы можете запустить базу данных как обычно, и все настройки пути к psql должны быть правильными!

avatar
Supun Muthutantrige
3 февраля 2017 в 05:40
6

Изменение МЕТОДА однорангового узла на доверие в pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | строка 85) решает проблему. При добавлении md5 запрашивается пароль, поэтому, если есть требование избегать использования паролей, используйте trust вместо md5 .

avatar
Åsmund
10 августа 2016 в 12:11
10

Если вы хотите сохранить конфигурацию по умолчанию, но хотите аутентификацию md5 с сокетным соединением для одного конкретного пользователя / соединения с базой данных, добавьте строку "local" ПЕРЕД строкой "local all / all":

# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local   dbname       username                         md5  # <-- this line
local   all          all                              peer
# IPv4 local connections:
host    all          all          127.0.0.1/32        ident
# IPv6 local connections:
host    all          all          ::1/128             ident
eaydin
1 ноября 2018 в 16:56
0

«ДО» в этом ответе заслуживает более подробного рассмотрения в других ответах. Оказывается, psql исследует записи в файле pg_hba.conf последовательно, как указано в документах: postgresql.org/docs/11/static/auth-pg-hba-conf.html

Kiry Meas
8 августа 2019 в 04:01
0

# ТИП БАЗЫ ДАННЫХ АДРЕС ПОЛЬЗОВАТЕЛЯ МЕТОД локальное имя пользователя dbname md5 # <- эта строка Не в порядке

Åsmund
16 ноября 2020 в 13:05
0

@KiryMeas Действительно. Фиксированный.

avatar
MageDev
21 июля 2016 в 09:13
6

Используйте host=localhost в соединении.

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
avatar
Alexandr Zaichenko
14 июня 2016 в 13:11
5

Просто установите для МЕТОДА доверие.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

И перезагрузите сервер postgres.

# service postgresql-9.5 reload

Изменения в pg_hba.conf не требуют ПЕРЕЗАГРУЗКИ сервера postgres. просто ПЕРЕЗАГРУЗИТЬ.

avatar
Taimoor Changaiz
10 сентября 2015 в 11:29
21
  1. Перейдите в этот /etc/postgresql/9.x/main/ и откройте pg_hba.conf файл

В моем случае:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Заменить одноранговый узел на md5

Таким образом, это будет изменено на:

Административный вход в базу данных через сокет домена Unix local all postgres peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

Это:

Административный вход в базу данных через сокет домена Unix локально все postgres md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
  1. Затем перезапустите сервер pg:

    $> sudo service postgresql restart

Ниже приведен список МЕТОДОВ, используемых для подключения к postgres:

# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.

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

СОВЕТ: Если он не работает после перезапуска postgres, закройте терминал и откройте его снова.

avatar
sibosop
25 августа 2015 в 21:42
7

Приведенные выше правки сработали для меня после того, как я понял, что мне нужно перезапустить сервер postgres после их внесения. Для ubuntu:

sudo /etc/init.d/postgresql restart
avatar
Luca Marletta
30 апреля 2015 в 12:20
11

Я перемещал каталог данных на клонированном сервере и не мог войти в систему как postgres. Сброс пароля postgres, подобный этому, сработал для меня.

root# su postgres
postgres$ psql -U postgres
psql (9.3.6) 
Type "help" for help. 
postgres=#\password 
Enter new password: 
Enter it again: 
postgres=#
avatar
d.danailov
8 апреля 2015 в 14:24
20

Если у вас есть проблема, вам нужно найти свой pg_hba.conf. Команда:

find / -name 'pg_hba.conf' 2>/dev/null

и после этого измените файл конфигурации:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

Следующий шаг: перезапуск вашего экземпляра db:

service postgresql-9.3 restart

Если у вас возникли проблемы, вам нужно снова установить пароль:

ALTER USER db_user with password 'db_password';

avatar
Mazen Ora
16 марта 2015 в 10:27
5

у меня работает следующая команда:

psql -d myDb -U username -W
Yaroslav Nikitenko
7 декабря 2015 в 18:04
0

man psql -W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.

avatar
StylusEater
28 февраля 2015 в 15:51
281

Если вы подключаетесь через localhost (127.0.0.1), у вас не должно возникнуть этой конкретной проблемы. Я бы не стал сильно гадить с pg_hba.conf, но вместо этого я бы скорректировал вашу строку подключения:

psql -U someuser -h 127.0.0.1 database

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

Вот что я делаю в Debian для настройки postgres:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database

Наслаждайтесь!

jeteon
31 января 2016 в 04:47
29

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

Anthony
26 января 2017 в 22:21
1

Мне пришлось изменить host: 127.0.0.1 по умолчанию на localhost в config / database.yml - он находится на том же компьютере, поэтому я не понимаю, почему

StylusEater
29 января 2017 в 16:41
0

Энтони, вы говорите, что у вас произошел сбой подключения, пока вы не настроили localhost на 127.0.0.1 в своем файле database.yml? Я предлагаю проверить ваш файл / etc / hosts, если это так. В противном случае может возникнуть другая странность, связанная с разрешением localhost.

mdh
25 февраля 2017 в 14:18
3

Это намного элегантнее по сравнению с использованием метода аутентификации локального однорангового узла.

normic
20 января 2019 в 23:21
1

Это снова меня поражает, думать о том, чтобы быть на localhost, не то же самое, что сказать об этом psql. Настоящая проблема заключается в том, что по крайней мере в ОС * nix psql в противном случае попытается подключиться через локальный сокет, что по умолчанию разрешено только для пользователя postgres.

Salil Junior
18 июня 2019 в 16:41
2

Это, безусловно, лучшее решение IMO

Lauris
20 ноября 2020 в 18:43
0

Это решение сработало для меня на Ubuntu 20 с небольшим изменением на верхний регистр -H в качестве имени параметра.

avatar
Arivarasan L
4 ноября 2014 в 12:25
507

После установки Postgresql я выполнил следующие шаги.

  1. Откройте файл pg_hba.conf. Для Ubuntu используйте, например, /etc/postgresql/13/main$ sudo nano pg_hba.conf и измените эту строку внизу файла, она должна быть первой строкой настроек:

    local   all             postgres                                peer
    От

    до

    local   all             postgres                                trust

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

    local   all             all                                peer

    -

    local   all             all                                md5

    Если вы использовали редактор nano, выйдите с помощью double Escape, x, y, Enter, чтобы сохранить файл конфигурации.

  2. Перезагрузите сервер

     $ sudo service postgresql restart
    

    Вывод: * Restarting PostgreSQL 13 database server

  3. Войдите в psql и установите пароль

     $ psql -U postgres
     db> ALTER USER postgres with password 'your-pass';
    

    Вывод: ALTER ROLE

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

     db> ALTER USER my_user with password 'your-pass';
    

    Затем введите:

     exit
    
  4. Наконец, измените pg_hba.conf с

    local   all             postgres                                trust
    От

    до

    local   all             postgres                                md5
  5. Перезагрузите сервер еще раз

     $ sudo service postgresql restart
    

    Вывод: * Restarting PostgreSQL 13 database server

  6. Войдите в psql с пользователем postgres

    После перезапуска сервера postgresql пользователь postgres принимает выбранный вами пароль:

     psql -U postgres
    

    Вывод:
    Password for user postgres:

    psql (13.4 (Ubuntu 13.4-1.pgdg20.04+1))

    Type "help" for help.

    И вы находитесь в psql:

    postgres=#

    Примечание: теперь то же самое работает для my_user, если вы добавили пользователя и пароль:

     psql -d YOUR_DB_NAME -U my_user
    

    который запросит у вас новый пароль my_user.

Сведения о методах аутентификации:

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

одноранговый узел - используйте имя пользователя операционной системы клиента в качестве имени пользователя базы данных для доступа к нему.

md5 - аутентификация на основе пароля

для получения дополнительной информации проверьте здесь

La-comadreja
18 ноября 2014 в 22:46
29

изменение метода на «доверие» сработало для меня. +1 за объяснение деталей метода аутентификации.

xji
22 ноября 2014 в 14:42
7

В OS X homebrew по умолчанию используется доверие, тогда как в Ubuntu каким-то образом по умолчанию установлено значение «одноранговый», что привело к расхождениям между моей настройкой и настройкой моего коллеги. Мы изменили его на MD5, что не помогло, так что «доверие» - вот настоящий ответ (мы проводим только тестирование разработки). Должен получить больше голосов.

Artem.Borysov
28 июля 2015 в 08:50
2

вы также можете установить md5 где угодно с самого начала

sianipard
16 сентября 2016 в 22:39
2

Этот способ у меня работает, метода md5 сначала не было.

Peter Krauss
27 августа 2017 в 15:52
0

нужно использовать одинаковые пароли? sudo passwd postgres

Muhammad Nasir Shamshad
19 сентября 2017 в 10:56
0

Привет, я выполнил шаги и изменил свой пароль. Но после того, как я изменил доверие на md5, закрыл nano, перезагрузил сервер с помощью 'sudo service postgresql reload' и попытался снова войти в систему с помощью psql -U postgres. Он запросил у меня мой пароль, и я предоставил его, но он сказал, что аутентификация пароля не удалась для пользователя " postgres "Я был на DigitalOcean одним щелчком мыши, рубин на рельсах.

Nam G VU
4 мая 2018 в 08:16
0

@ArivarasanL Почему нам нужно вернуть метод postgres к md5 aka. почему бы просто не оставить его trust для localhost?

Peter Krauss
16 июля 2018 в 02:30
0

Обновление для любой версии :, чтобы проверить файл conf: sudo -u postgres psql -c "SHOW config_file"

jrh
28 февраля 2021 в 18:34
0

Я прочитал это и сначала подумал, что изменение этого параметра на trust позволит кому угодно и где угодно войти на сервер, но после прочтения документации на local я думаю, что понимаю, почему это нормально для моего варианта использования . Доменные сокеты Unix кажутся формой IPC и обмениваются данными только между процессами в одной и той же ОС , поэтому этот сервер должен быть недоступен для любой машины, кроме моего компьютера разработчика.

Jeff Bluemel
3 августа 2021 в 23:29
0

Работает отлично, md5 у меня тоже не подойдет.

questionto42
10 сентября 2021 в 12:13
0

@JeffBluemel Просто переход на md5 (самый популярный ответ! ??) у меня тоже не сработал. md5 нужен только в самом конце всего этого после установки pw пользователя postgres. А пока, настраивая пароли, вы должны подключиться как postgres с настройкой trust. Затем перезапустите, затем войдите в систему с пользователем postgres с pw, и оттуда вы всегда можете изменить другой pw других пользователей. В конце замените все ранее peer на md5.

avatar
nirvanastack
14 октября 2013 в 02:25
11

У меня была такая же проблема.

Решение от depa абсолютно верное.

Просто убедитесь, что у вас есть пользователь, настроенный на использование PostgreSQL.

Проверьте файл:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

Разрешение на этот файл должно быть предоставлено пользователю, у которого вы зарегистрировали свой psql.

Далее. Если у тебя все хорошо до сих пор ..

Обновите согласно инструкциям @depa.

т.е.

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

, а затем внесите изменения.

Sun
16 июня 2018 в 07:48
0

У меня такая же проблема. Но какие разрешения мне нужны, я не знаю. можешь помочь мне. Я получаю вывод команды ls: -rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf