Psql не удалось подключиться к серверу нет такого файла или каталога

Обновлено: 02.07.2024

Я пытаюсь запустить psql на моей машине Vagrant, но я получаю эту ошибку:

ИЗМЕНИТЬ Команды, которые я использовал для установки и запуска postgres:

  • sudo apt-get update
  • sudo apt-get install postgresql
  • sudo su postgres
  • psql -d postgres -U postgres

У меня была такая же проблема, связанная с настройкой моего файла pg_hba.conf (находится в /etc/postgresql/9.6/main ). Обратите внимание, что 9.6 - это версия postgresql, которую я использую.

Сама ошибка связана с неправильной настройкой postgresql, которая вызывает сбой сервера перед его запуском.

Я хотел бы предложить следующие инструкции:

  1. Убедитесь, что служба postgresql работает, используя sudo service postgresql start
  2. Запустите pg_lsclusters из вашего терминала

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

Версия - каталог данных владельца статуса порта кластера

9.6 ------- main - 5432 онлайн постгрес /var/lib/postgresql/9.6/main

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

2017-07-13 16:53:04 BRT 32176 LOG: недопустимый метод аутентификации «all»
2017-07-13 16:53:04 BRT 32176 КОНТЕКСТ: строка 90 файла конфигурации "/etc/postgresql/9.5/main/pg_hba.conf"
2017-07-13 16:53:04 BRT 32176 FATAL: не удалось загрузить pg_hba.conf

Я много искал, чтобы найти это, кредит идет на это пост.

У меня та же проблема с Postgres 11 на моем Mac. Я получаю эту ошибку каждый раз после перезагрузки

В качестве временного исправления я делаю

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

enter image description here

Обратите внимание, что pg_hba.conf принадлежит root, и пользователи даже не могут его прочитать. Это приводит к тому, что postgres не может открыть этот файл и, следовательно, не может запустить сервер, что приводит к ошибке, замеченной в исходном вопросе.

sudo chmod +r pg_hba.conf

Мне удалось сделать этот файл снова доступным для пользователя postgres, а затем после запуска

sudo service postgresql start

Был в состоянии запустить сервер снова.

У меня иногда возникает та же проблема, но в основном после обновления MacOS. Завершение работы и переход на новую версию обычно исправляет это для меня (внесите изменения в соответствии с вашей версией). Итак, сначала обновите ваш postgresql

В основном это временное исправление, но так как я не смог найти лучшего решения, это работает для меня.

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

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

С опцией порта, может быть ответ. Вы можете использовать PSQL.

Просто переустановите pgsql с прямой версией sudo apt-get install postgresql-9.5 (вы должны удалить пакет перед установкой нового)

Откройте менеджер базы данных и выполните этот скрипт

Я получил эту ошибку, когда восстановил базу данных из последнего файла резервной копии pg_basebackup. После этого, когда я пытался подключиться к базе данных (PSQL), я получал ту же ошибку. Ошибка была устранена, когда я обновил файл pg_hba.conf и, где бы ни находилась «равноправная» аутентификация, я заменил ее на «md5», а затем перезапустил службы postgres. После этого проблема была решена.

У меня была такая же ошибка при создании базы данных SQL в виртуальной машине. Я изменил значение по умолчанию /etc/postgresql/9.3/main/postgresql.conf shared_buffers = 200MB до 75% от общего объема ОЗУ. Ну, я забыл на самом деле выделить эту оперативную память в виртуальной машине. Когда я дал команду на создание новой базы данных, я получил ту же ошибку.

Выключил, дал ребенку бутылочку (RAM) и presto, все заработало.

/etc/postgresql/9.6/main/postgresql.conf показывает, что назначается порт? При моей установке по умолчанию Xubuntu Linux мой показывал порт = 5433 по некоторым причинам настолько хорошо, насколько я помню, но я закомментировал строку в том же файле, которая гласила listen_addresses = 'localhost' , и раскомментировал строку listen_addresses = '*' . Так что, возможно, начать и проверить там. Надеюсь, это поможет.

В моем случае проблема была связана с файлом блокировки postmaster.id , который не был удален должным образом во время последнего сбоя системы. Удаление его с помощью sudo rm /usr/local/var/postgres/postmaster.pid и перезапуск Postgres решили проблему.

Это единственное, что сработало для меня после бесчисленных часов устранения неполадок.

Я смог решить проблему, запустив:

Со мной произошло то же самое, когда я что-то изменил в файле /etc/hosts . После изменения его на 127.0.0.1 localhost это сработало для меня.

Я пытаюсь запустить psql на моей бродячей машине, но я получаю эту ошибку:

редактировать Команды, которые я использовал для установки и запуска postgres:

  • sudo apt-get update
  • sudo apt-get install postgresql
  • sudo su postgres
  • psql -d postgres -U postgres

у меня была такая же проблема, связанная с конфигурацией моего pg_hba.файл conf (находится в /etc/postgresql/9.6/main ). Пожалуйста, не то, что 9.6-это версия postgresql, которую я использую.

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

Я бы предложил следовать этим инструкциям:

  1. Удостоверьте, что служба postgresql запущена, используя sudo service postgresql start
  2. Run pg_lsclusters из своего терминал

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

версия-каталог данных владельца состояния порта кластера

9.6 ------- главное -- 5432 Postgres из онлайн каталога /var/lib в/с PostgreSQL/9.6/главная

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

2017-07-13 16:53: 04 BRT 32176 ЖУРНАЛ: недопустимый метод аутентификации "все"
2017-07-13 16:53: 04 BRT 32176 контекст: строка 90 файла конфигурации " / etc/postgresql/9.5/main / pg_hba.conf"
2017-07-13 16:53: 04 BRT 32176 FATAL: не удалось загрузить pg_hba.conf

Я много искал, чтобы найти это, кредит идет на это в должности.

тут /etc/postgresql/9.6/main/postgresql.conf показать, что порт назначается? На моей установке Xubuntu Linux по умолчанию мой показал port = 5433 по какой-то причине, насколько я помню, но я прокомментировал строку в том же файле, который сказал listen_addresses = 'localhost' и раскомментировал строку listen_addresses = '*' . Так что, может быть, начнем и проверим там. Надеюсь, это поможет.

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

enter image description here

обратите внимание, как файл pg_hba.conf принадлежит root, и пользователи даже не могут его прочитать. Это приводит к тому, что postgres не сможет открыть этот файл и, следовательно, не сможет запустить сервер, вызвав ошибку в исходном вопросе.

sudo chmod +r pg_hba.conf

я смог сделать этот файл снова доступным для пользователя postgres, а затем после запуска

Я установил стек Bitnami Django, который включал PostgreSQL 8.4.

Когда я бегу psql -U postgres Я получаю следующую ошибку:

PG определенно работает и pg_hba.conf файл выглядит так:

"Доказательство", что pg работает:

21 ответ

Эта проблема возникает из-за установки postgres пакет без номера версии. Хотя postgres будет установлена ​​и будет правильной версией, скрипт для настройки кластера будет работать некорректно; это проблема упаковки.

Если вам удобно postgres есть скрипт, который вы можете запустить, чтобы создать этот кластер и получить postgres Бег. Тем не менее, есть более простой способ.

Сначала удалите старую установку postgres. В настоящее время проблема заключается в 9.1, поэтому я буду считать, что это то, что вы установили

Теперь просто переустановите

Запишите название пакета с номером версии. НТН.

The error message refers to a Unix-domain socket, so you need to tweak your netstat invocation to not exclude them. So try it without the option -t :

I would guess that the server is actually listening on the socket /tmp/.s.PGSQL.5432 rather than the /var/run/postgresql/.s.PGSQL.5432 that your client is attempting to connect to. This is a typical problem when using hand-compiled or third-party PostgreSQL packages on Debian or Ubuntu, because the source default for the Unix-domain socket directory is /tmp but the Debian packaging changes it to /var/run/postgresql ,

Возможные обходные пути:

  • Use the clients supplied by your third-party package (call /opt/djangostack-1.3-0/postgresql/bin/psql ). Возможно, удалите все пакеты, поставляемые с Ubuntu (это может быть сложно из-за других обратных зависимостей).
  • Исправьте каталог сокетов стороннего пакета, чтобы он был совместим с Debian/Ubuntu.
  • использование -H localhost to connect via TCP/IP instead.
  • использование -h /tmp or equivalent PGHOST setting to point to the right directory.
  • Не используйте сторонние пакеты.

Ты можешь использовать psql -U postgres -h localhost заставить соединение происходить через TCP вместо доменных сокетов UNIX; ваш netstat вывод показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.

Вы можете узнать, какой локальный сокет UNIX используется сервером PostgrSQL, используя другой вызов netstat:

В любом случае, интерфейсы, на которых слушает сервер PostgreSQL, настроены в postgresql.conf ,

Просто создайте мягкую ссылку, подобную этой:

Это работает для меня:

Включить или добавить:

Перезапустите ядро ​​базы данных:

Также вы можете проверить файл pg_hba.conf

И добавьте адрес своей сети или хоста:

Я заставляю это работать этим:

Выберите предпочитаемые локали и запустите

(9.5 - это моя версия postgresql)

и тогда это работает!

Мне пришлось скомпилировать PostgreSQL 8.1 на Debian Squeeze, потому что я использую Project Open, который основан на OpenACS и не будет работать на более поздних версиях PostgreSQL.

Конфигурация компиляции по умолчанию помещает unix_socket в /tmp , но Project Open, который опирается на PostgreSQL, не будет работать, потому что он ищет unix_socket в /var/run/postgresql ,

Есть настройка в postgresql.conf установить местоположение розетки. Моя проблема заключалась в том, что либо я мог установить для /tmp а также psql работал, но проект не открыт, или я мог бы установить его для /var/run/postgresql а также psql не будет работать, но проект открыт.

Одним из решений этой проблемы является установка сокета для /var/run/postgresql а потом беги psql по предложению Петра, как:

Это выполняется локально с использованием локальных разрешений. Единственным недостатком является то, что он больше печатает, чем просто "psql".

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

и явно установить unix_socket в /var/run/postgresql/.s.PGSQL.5432 в postgresql.conf ,

Если ваша служба Postgres запущена и работает без каких-либо ошибок или при запуске службы Postgres нет ошибок, но вы все еще получаете указанную ошибку, выполните следующие действия.

Шаг 1: Бег pg_lsclusters выведет список всех кластеров postgres, работающих на вашем устройстве

Скорее всего, статус будет ниже в вашем случае и сервис Postgres

Шаг 2: перезапустите pg_ctlcluster

Шаг 3: Шаг 2 не удался и выдал ошибку

Если этот процесс не будет успешным, он выдаст ошибку. Вы можете увидеть журнал ошибок на /var/log/postgresql/postgresql-9.6-main.log

Моя ошибка была:

Шаг 4: проверьте право собственности на postgres

Удостоверься что postgres является владельцем /var/lib/postgresql/version_no/main

Если нет, запустите

Шаг 5: Проверьте, что пользователь postgres принадлежит к группе пользователей ssl-cert

Решение:

и это. (9.3 - это моя текущая версия PostgreSQL. Напишите свою версию!)

В моем случае это было вызвано опечаткой, которую я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf

Но MD5 должен был быть в нижнем регистре md5 :

Во-первых, отключите все параметры ведения журнала в postgresql.conf. Это раздел:

Закомментируйте все в этом разделе. Затем перезапустите сервис.

При перезапуске используйте /etc/init.d/postgresql start или же restart Я нашел полезным находиться в режиме суперпользователя при перезапуске. У меня было открыто окно x только для этой операции. Вы можете установить этот режим суперпользователя с помощью sudo -i ,

Убедитесь, что к серверу можно подключиться с помощью этой простой команды: psql -l -U postgres

Если это не помогает, то подумайте:

Я менял владельца многих папок, пытаясь найти решение. Я знал, что я, вероятно, буду пытаться вернуть владельцы этих папок и chmod еще 2 дня. Если вы уже перепутали владельцев этих папок и не хотите полностью очищать свой сервер, начните отслеживать настройки всех затронутых папок, чтобы вернуть их в исходное состояние. Возможно, вы захотите попробовать выполнить параллельную установку в другой системе и систематически проверять владение и настройки всех папок. Утомительно, но вы можете получить доступ к своим данным.

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

Использование PostgreSQL

Как запустить службу PostgreSQL. Как управлять службой PostgreSQL

Запуск службы PostgreSQL:

Остановка службы PostgreSQL:

Добавление службы PostgreSQL в автозагрузку:

Удаление службы PostgreSQL из автозагрузки:

Для просмотра состояния процесса PostgreSQL:

Альтернативный вариант запуска службы для работы с определённой базой данных следующий:

Как узнать, какая версия PostgreSQL запущена

Версию запущенной PostgreSQL не всегда можно определить по установленным пакетам. Например, во время обновления PostgreSQL на некоторых дистрибутивах не заменяет предыдущую версию, а устанавливает новую в дополнении к имеющейся. Иногда у пользователя в корпоративной среде есть доступ через Navicat или phpPgAdmin, но нет доступа к консоли сервера, на котором работает база данных.

Для определения версии сервера выполните команду:


Для определения версии клиента:


Ещё один вариант определения версии PostgreSQL:


Если вам нужен только номер версии (например, для скрипта), то используйте следующую команду:

Хотя вместо postgres можно использовать postmaster, использование postgres предпочтительнее, поскольку postmaster это устаревший псевдоним для postgres.

Если вы предпочитаете вариант с SQL, то подключитесь к интерактивному терминалу:

Также вам может пригодиться один из следующих вариантов


Как инициализировать базу данных PostgreSQL

Остановите службу, если она запущена:

Директория /var/lib/postgres/ должна принадлежать пользователю postgres:

Смените пользователя на postgres:

Выполните инициализацию БД:

Если вы столкнулись с ошибкой:

То найдите расположение файла initdb:

И укажите до него полный путь в команде инициализации:

Нажмите CTRL+D

Запустите службу PostgreSQL:

Создайте нового пользователя (например, user):

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

Создайте базу данных (например, my-first-db):

Как подключиться к локальному серверу PostgreSQL

Для подключения к интерактивному терминалу PostgreSQL используется команда psql.

Примеры синтаксиса команд:

Для psql требуется указать имя пользователя и если он не указан, то пересылается имя текущего пользователя системы, который скорее всего отсутствует в базе данных PostgreSQL, что вызывает ошибку. По умолчанию создаётся пользователь postgres, поэтому без дополнительной настройке вы можете подключиться к серверу PostgreSQL следующим образом:

Какой конфигурационный файл использует PostgreSQL

Конфигурационный файл PostgreSQL носит имя postgresql.conf.

В системе может быть несколько конфигурационных файлов PostgreSQL. Вы можете найти их командой:

Что особенно важно, systemd может использовать свои собственные конфигурационные файлы, например:

  • /usr/lib/systemd/system/postgresql@.service.d/kali_postgresql.conf (путь в Kali Linux)
  • /usr/lib/sysusers.d/postgresql.conf (путь в Arch Linux)

Если вы настраиваете PostgreSQL, но после перезапуска службы с помощью systemd (systemctl) изменения не применяются, возможно, вы просто редактируете неверный файл.

Также конфигурационный файл имеется в директории с базой данных, например:

  • /var/lib/postgres/data/postgresql.conf

С пакетом PostgreSQL могут поставляться образцы конфигурационных файлов, например:

  • /usr/share/postgresql/14/postgresql.conf.sample
  • /usr/share/postgresql/postgresql.conf.sample

Как обновить базу данных PostgreSQL при переходе на новую версию


Оно означает, что в системе 2 установленные версии PostgreSQL:

Если запустить службу PostgreSQL командой:

И проверить версию командой:

То будет выведено следующее:


То есть по умолчанию используется 13, устаревшая версия.

Удаление старых версий пакетов, например, командой:

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

Последующие действия подразумевают, что вы

1) установили новую версию PostgreSQL, но ещё не использовали её, то есть не сохраняли базы данных, поскольку файлы новой версии будут удалены.

2) хотите перенести старые база данных в новый формат

С помощью следующей команды просмотрите доступные кластеры:


На скриншоте только один из них online (я успел удалить пакет postgresql-13), но у вас оба должны быть online, иначе перенос базы данных не удастся.

Пример правильного вывода:

Как можно увидеть, обе версии 13 и 14 в настоящее время установлены и запущены. Держите в уме, что при переносе старой базы данных в новый формат вам понадобиться двойной объём места на диске, поскольку pg_upgradecluster копирует данные.

Процедура обновления включает в себя следующее:

1. Удаляем данные новой версии:

2. Запускаем процедуру обновления кластера:


3. Когда операция будет завершена, дважды проверьте, что всё работает

4. Удалите старую версию

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

Вновь проверяем версию:


Теперь используется 14, то есть самая последняя версия.

В чём разница между postgres и psql

postgres

postgres - это сервер базы данных PostgreSQL. Чтобы клиентское приложение могло получить доступ к базе данных, оно подключается (по сети или локально) к работающему экземпляру postgres. Затем экземпляр postgres запускает отдельный серверный процесс для обработки соединения.

Один экземпляр postgres всегда управляет данными только одного кластера базы данных. Кластер базы данных — это набор баз данных, который хранится в общей папке файловой системы («область данных»). В системе может работать более одного экземпляра postgres одновременно, если они используют разные области данных и разные порты связи. Когда postgres запускается, ему необходимо знать расположение области данных. Местоположение должно быть указано параметром -D или переменной среды PGDATA; по умолчанию это значение не установлено. Обычно -D или PGDATA указывает непосредственно на каталог области данных, созданный initdb.

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

Чтобы запустить postgres в фоновом режиме со значениями по умолчанию, введите:

Чтобы запустить postgres с определенным портом, например, 1234:

Чтобы подключиться к этому серверу с помощью psql, укажите этот порт с параметром -p:

или установите переменную окружения PGPORT:

psql

psql — это интерфейс для PostgreSQL на основе терминала. Он позволяет вам вводить запросы в интерактивном режиме, отправлять их в PostgreSQL и просматривать результаты запросов. В качестве альтернативы ввод может быть из файла или из аргументов командной строки. Кроме того, psql предоставляет ряд мета-команд и различных функций, подобных оболочке, для облегчения написания сценариев и автоматизации широкого спектра задач.

Пример запуска psql:

Запуск psql от пользователя postgres, который создаётся по умолчанию:

Ошибки PostgreSQL

psql: error: не удалось подключиться к серверу: Нет такого файла или каталога

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

вы можете столкнуться с ошибкой:

В англоязычной версии эта ошибка выглядит так:

Эта ошибка означает, что служба PostgreSQL не запущена, для её запуска выполните команду:

Альтернативный вариант запуска службы следующий:

Другой возможной причиной ошибки может быть то, что psql ищет файл сокета в неверной директории: например, файл сокета помещён в /tmp, а psql ищет его в /run/postgresql/. В этом случае вы можете с помощью опции --host явно указать директорию, в которой находится сокет:

FATAL: не удалось создать файл блокировки "/run/postgresql/.s.PGSQL.5432.lock": Нет такого файла или каталога

При запуске системы БД, например, следующей командой:

Вы можете столкнуться с ошибкой:


В англоязычной версии ошибка выглядит так:

  1. Создать данную директорию (если она отсутствует) и сделать её владельцем пользователя postgres
  2. Отредактировать конфигурационный файл так, чтобы служба пыталась создавать файл блокировки в директории /tmp, на которую у всех пользователей есть право записи

Первый вариант — создаём директорию /run/postgresql/ и назначаем её владельцем пользователя postgres:

Второй вариант — открываем конфигурационный файл postgresql.conf (у вас может быть другое расположение)

И добавляем туда следующую запись:

sudo: postgres: command not found

Если при использовании postgres вы столкнулись с ошибкой:

то у этой проблемы может быть две возможных причины:

1. Не установлен пакет postgresql.

Установите его одной из следующих команд.

В Debian, Kali Linux, Linux Mint, Ubuntu и их производных:

В Arch Linux, Manjaro, BlackArch и их производных:

2. Исполнимый файл postgres находится за пределами $PATH

Это необязательно говорит о проблеме — такой подход может использоваться для возможности иметь на одном компьютере сразу несколько серверов PostgreSQL.

Найдите исполнимый файл


Как можно видеть на скриншоте, исполнимый файл присутствует для двух версий сервера:

  • /usr/lib/postgresql/13/bin/postgres
  • /usr/lib/postgresql/14/bin/postgres

Теперь вместо postgres используйте полный путь в команде запуска, например:

psql: ошибка: ВАЖНО: роль "" не существует

При попытке запуска интерактивного терминала PostgreSQL

Вы можете столкнуться с ошибкой:

Имя пользователя может быть другим — там будет показано имя того пользователя, котоырй пытается выполнить вход.

В англоязычной версии ошибка выглядит так:


Для psql необходимо имя пользователя и если оно не указано явно, то передаётся имя пользователя системы. Но поскольку данный пользователь не существует на сервере PostgreSQL, то возникает указанная выше ошибка.

Вы можете создать пользователя с любы именем, как это показано выше и ошибка исчезнет.

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

Вы должны указать его расположение в параметре --config-file или -D, либо установить переменную окружения PGDATA

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


В англоязычной версии:

Суть ошибки в том, что необходимо указать конфигурационный файл в опции командной строки или в переменной окружения. Как вариант — можно указать путь до базы данных, содержащий конфигурационный файл. Например:

Конфигурационный файл называется postgresql.conf, но нужно указать не его, а директорию, в которой он содержится. Например:


initdb: command not found

Смотрите объяснение данной проблемы, а также дополнительные пути устранения в описании аналогичной ошибки: sudo: postgres: command not found

Найдите initdb с помощью:

  • /usr/lib/postgresql/13/bin/initdb
  • /usr/lib/postgresql/14/bin/initdb

И используйте в ваших командах абсолютный путь до файла initdb нужной вам версии, например:

Читайте также: