Почему PostgreSQL 9.3 не запускается в Ubuntu?

13

Я успешно установил PostgreSQL 9.3 из репозитория APT на 2 виртуальных машинах, работающих под управлением 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, оказались идеальными ... не знаю, почему этот хост-компьютер не проходит ...

DPSSpatial
источник
У вас есть /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 Файл журнала пуст ... Файл конфигурации - и я думаю, что это то, что вам нужно - говорит # Если external_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 сокета является временным dir in / run. По сути, сценарий init.d должен позаботиться о создании dir сокета в / run / postgresql, если он не существует во время действия запуска. Это всегда будет положение вещей после перезагрузки.

Проблема, однако, в том, что сценарий init.d завершит работу перед выполнением действия start, если dir сокета не существует. Это связано с тем, что вызов pg_lsclusters завершится неудачей без dir сокета, что, в свою очередь, не позволяет начальному действию создавать dir сокета.

Я не выяснил, что является лучшим решением, но если я переместил логику для создания dir сокета из действия start до вызова pg_lsclusters, я смогу без проблем запустить сервер после перезагрузки.

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

# 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
источник
спасибо @ 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

Убедитесь, что каталог / var / run / 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 или отключено.

ЭГДС.

Эрнесто
источник
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
k_o_
источник
-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

Теперь мой сервер запущен и работает !!!

РЕДАКТИРОВАТЬ : после перезагрузки сервер все еще не работает ...

Любые мысли о том, почему мне нужно было запустить это приветствуются!

DPSSpatial
источник
Вы уверены, что это 9.3 работает? Номер версии кажется подозрительным ...
dezso
@dezso Извините, забыл изменить версию #, когда я вставил эти команды ... это все в
версии 9.3
Вам может потребоваться указать порт. Порт по умолчанию используется вашей старой установкой postgres. Ваша новая установка, скорее всего, использует порт 5433, но это можно проверить, прочитав файл конфигурации postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581
1
Это может быть обходной путь, но явно не хорошее решение. Это похоже на решение проблемы dba.stackexchange.com/a/91511/8099
Сорин