Чому PostgreSQL 9.3 не запуститься на Ubuntu?


13

Я успішно встановив PostgreSQL 9.3 з репозиторію APT на 2-х VM, що працює на Ubuntu 12.04 та 13.04 ... однак я не можу змусити його правильно встановитись на моїй хост-машині під управлінням Ubuntu 12.04.

Встановлення (цього разу) здається нормальним, але, можливо, є помилка, яку я не розумію:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

Тоді я намагаюся додати себе як користувач PostgreSQL, але я отримую це:

createuser: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Я не бачу, як PostgreSQL працює на системному моніторі, і жоден файл у папці / var / run / postgresql / / ... повністю порожній.

РЕДАКТУВАННЯ: У віртуальних машинах є файл у / var / run / postgresql / званий 9.3-main.pid

У файлі журналу хост-машини нічого не знаходиться / var / log / postgresql

Отже ... що тут відбувається, що не відбувається в моїх вітринах? Як я вже говорив, інші установки на машині управління, включаючи PostGIS і PGAdmin, були ідеальними ... не маю уявлення, чому ця хост-машина не переживає ...


У вас насправді є /var/run/postgresqlкаталог? На одному етапі після успішної установки ця папка відсутня на моїй машині. Що говорить конфігурація про те, який каталог він повинен використовувати?
Colin 't Hart

@ Colin'tHart У мене є ця директорія ... однак нічого в ній немає ... у вітринах машин є файл, створений під назвою 9.3-main.pid Де я можу знайти цю інформацію про конфігурацію?
DPSSpatial

postgresql.confв каталозі config, який відповідно до вище, є /etc/postgresql/9.3/main. Ви також повинні заглянути у файли журналів, ймовірно, у /var/log/postgresql.
Colin 't Hart

@ Colin'tHart Файл журналу порожній ... Конфігураційний файл - і я вважаю, що це те, що ви шукаєте - говорить # Якщо зовнішній_pid_file явно не встановлений, не записується додатковий PID-файл. external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial

Чи є в цьому каталозі файл сокета або він справді повністю порожній?
Colin 't Hart

Відповіді:


16

Під час встановлення PostgreSQL мої налаштування мови не були правильно налаштовані. Чистка та перевстановлення не допомогли. Я дотримувався тут інструкцій, і це зробило для мене хитрість.

Основні частини пов'язаної інформації, відтвореної нижче:

Проблема проявилася таким чином:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

Перший вирішити було дуже просто, виконавши:

#dpkg-reconfigure locales

... та вибір бажаних локалів.

Але після цього PostgreSQL все-таки відмовився запускатися. Це пов'язано з тим, що процес встановлення намагався створити кластер під час встановлення, але через погані локалі цього не було зроблено. Отже, ми повинні повторити цей крок, виконавши:

#pg_createcluster 9.3 main --start

(Для 9.3 версії PostgreSQL)

Після цього кроку PostgreSQL запускається бездоганно через

#/etc/init.d/postgresql start

2
Врятувало мені життя. Дійсно, що очищення та перевстановлення не допомагає навіть тоді, коли локальність виправлена. Це витрачало 2 години мого життя :(
Ешер

У разі , pg_createclusterкаже вам , що кластер вже існує вам потрібно кинути його першим (це буде стерти всі дані в ньому, тому переконайтеся , що у вас є резервна копія) pg_dropcluster 9.3 main.
Флоріан Брюкер

6

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

Моя проблема з 9.3 на Ubuntu стосується того, що dir socket є перехідним dir в / run. В основному, сценарій init.d повинен піклуватися про створення dir сокета в / run / postgresql, якщо він не існує під час дії запуску. Це завжди буде стан речей після перезавантаження.

Однак проблема полягає в тому, що скрипт init.d буде закритий перед виконанням дії запуску, якщо dir сокета не існує. Це тому, що виклик pg_lsclusters не зможе без dir сокета, що, в свою чергу, перешкоджає стартовій дії коли-небудь створювати dir сокета.

Я не зрозумів, яке найкраще рішення, але якщо я перенесу логіку створення dir сокета від стартової дії до виклику до pg_lsclusters, я можу без проблем запустити сервер після перезавантаження.

Ось частина стартової дії, яка обробляє створення режиму socket:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

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

ДОДАТИ:

Я думаю, що причина, з якою я стикався з цією проблемою, полягає в тому, що у мене не було налаштованого хорошого значення для unix_socket_directories . У 9.2 цей параметр конфігурації використовувався як unix_socket_directory, який я видалив, а не перейшов до unix_socket_directories. Оскільки я встановив значення для unix_socket_directories, у мене не було проблем із запуском сервера.


дякую @ tdg5 !!! Я цього не вирішив, але думаю, що це зводиться до кількох поганих встановлень на моїй машині. Встановлення з репозиторію PostgreSQL Apt на свіжу установку ubuntu вирішило мої проблеми ...
DPSSpatial

3
@mapBaker - я оновив свою відповідь, щоб включити першопричину проблеми запуску PG 9.3 в мою конкретну ситуацію. Можливо, це стане в нагоді і вам.
tdg5

1
Мій PG9.3 не запускався після перезавантаження. Додавання рядка "unix_socket_directories = '/ var / run / postgresql'" до postgresql.conf 9.3 вирішив його. Спасибі
alfonx

Спасибі! Деякий час працювали над цим, радий знайти цей самородок!
Сербан Танаса

3

У мене виникло декілька проблем із файлом сокетів у вашому випадку /var/run/postgresql/.s.PGSQL.5432

переконайтеся / вар / запустити / PostgreSQL каталогу існує і є для запису перед початком PostgreSQL для отримання додаткової інформації див цього обговорення .

також при підключенні прапора -h:

psql -h localhost 

і подивіться, чи це вирішує.


1

Це, здається, вирішує проблему на Ubuntu:

Редагувати postgresql.conf:

unix_socket_directories='/var/run/postgresql

Тепер зробіть service postgresql start


1

Я новачок в PSQL, але вирішив проблему, відредагувавши start.conf. Я прокоментував налаштування "auto" для управління сервером вручну, але воно потребує значення: auto, manual або disabled.

EGD.


1

З мого боку сценарій запуску невірний. Файли конфігурації встановлені в /etc/postgresql/9.3/main, але сценарій /usr/share/postgresql-common/init.d-functions шукає в

for c in /etc/postgresql/"$2"/*; do 

Замініть цей рядок на

for c in /etc/postgresql/"$2"/main; do

-2

Усі,

після деякого копання я знайшов тут (а) рішення:

http://ubuntuforums.org/showthread.php?t=869080

Що містило ці інструкції:

Запуск у терміналі:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

Тепер мій сервер працює і працює !!!

EDIT : після перезавантаження сервер все ще не працює ...

Вдячні будь-які думки щодо того, для чого мені потрібно було це запустити!


Ви впевнені, що це 9.3? Номер версії здається підозрілим ...
dezso

@dezso вибачте забув змінити версію #, коли я вставив ці команди ... це все на v9.3 ...
DPSSpatial

Можливо, вам потрібно буде вказати порт. Порт за замовчуванням використовується вашою старою установкою постгресів. Ваша нова установка використовує порт 5433, швидше за все, але це те, що ви можете впевнитись, прочитавши файл конфігурації postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581

1
Це може бути вирішення, але явно не вдале рішення. Це схоже на вирішення проблеми dba.stackexchange.com/a/91511/8099
sorin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.