Виправлення: psql: не вдалося підключитися до сервера: такого файлу чи каталогу немає

PostgreSQL просуває себе як найдосконалішу платформу додатків для баз даних з відкритим кодом, і Debian Linux, безсумнівно, має безліч пакетів, які роблять її ще більш складною. Ви також можете знайти завантажені пакети для PostgreSQL, якщо ви працюєте з Ubuntu Server або будь-яким з різних спінів Ubuntu, оскільки вони засновані на ядрі Debian. Цей рівень складності та розробки робить попередження "неможливо підключитися до сервера" та "немає такого файлу або каталогу" набагато дратує.

На щастя, це, як правило, прості випадки проблем з дозволами, спричинені тим, що PostgreSQL хоче, щоб користувач з іменем postgres утримував ці каталоги. За допомогою простого трюку командного рядка ви можете виправити це майже миттєво. Однак вам слід заздалегідь пройти кілька основних діагностичних перевірок, лише щоб переконатися, що це насправді проблема, з якою ви стикаєтесь.

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

Спочатку спробуйте перезапустити систему PostgreSQL вручну. Іноді цього буває достатньо, щоб виправити ситуацію, а якщо ні, то ви принаймні отримаєте повідомлення про помилку, з якого працюватиме. Швидше за все, ви просто перезавантажуєте систему, видаючи команду psql як користувач postgres.

Можливо, ви виявите, що це все прояснило. В іншому випадку, ви можете отримати рядок із написом "psql: не вдалося підключитися до сервера: Немає такого файлу або каталогу", що означає, що у вас є проблеми з дозволом. Якщо ви отримаєте це повідомлення про помилку, ви також отримаєте інший текстовий виплеск.

Перевірте стан служби, якщо ви отримали це повідомлення, щоб переконатися, що модулі завантажені. Вони повинні бути, але якщо це не так, ви можете перезапустити. Якщо ви отримуєте повідомлення із написом "Loaded: loaded (/lib/systemd/system/postgresql.service; увімкнено)", тоді вони працюють. Спробуйте перезапустити службу sudo postgresql, щоб лише зробити короткий перезапуск і перевірити, чи це щось виправляє. Зазвичай це не так, але, можливо, варто спробувати.

Якщо припустити, що це не допомогло, загляньте всередину журналу PostgreSQL, щоб знайти помилки. У малоймовірному випадку ви знайдете щось про помилки пакету, можливо, вам не вистачає одного з модулів SQL. Зазвичай це не причина цих проблем, але, звичайно, не може зашкодити хоча б поглянути. Швидше за все, ви насправді натрапите на щось, що попереджає вас, що “Дозволи повинні бути u = rwx (0700)” і

що “каталог даних“ /var/lib/postgresql/9.6/main ”має груповий або світовий доступ”, хоча ви можете бачити інший номер версії залежно від того, який SQL-сервер ви використовуєте.

Це тому, що Debian та подібні дистрибутиви очікують, що користувач та група postgres контролюють ці каталоги з дозволами 0700 та всіма файлами через дозволи 0600 заради безпеки. Все, що вам потрібно зробити, це виконати таку команду на терміналі, щоб виправити дозволи:

sudo chown -R postgres: postgres /var/lib/postgresql/9.6/ && sudo chmod -R u = rwX, go = /var/lib/postgresql/9.6/

Майте на увазі, що це має бути верхній регістр X, а не найпоширеніший нижній регістр x, з яким ви, мабуть, більше знайомі через конкретний спосіб, яким ви хочете встановити ці параметри дозволу файлу. Хоча для цього вам потрібен root-доступ, включення цих двох позначок sudo має бути більш ніж достатнім, щоб надати собі належні дозволи під час роботи від звичайного користувача. Це важливо, оскільки Ubuntu та різні реалізації Linux виділилися з Ubuntu, хешуючи основний кореневий обліковий запис, тому вам потрібно робити все таким чином.

Як тільки ця команда закінчиться, ви можете перезапустити службу знову, перезапустивши службу sudo postgresql з терміналу, і цього разу у вас не повинно бути помилок. Якщо ви мали поглянути на журнал, то цих попереджень щодо проблем з дозволами також більше не повинно бути.

Це помилка, яка трапляється внаслідок досить конкретних умов, тому вам не слід повторювати її після першого виправлення, за умови, що ви не намагаєтесь вручну робити щось, що стосується маніпулювання дозволами каталогів PostgreSQL. Немає жодної ситуації, коли це дійсно мало б бути необхідним, крім виправлення цієї проблеми.