Устранение неработающих установок PostgreSQL в Ubuntu 10.04 и запуск заново

Я обнаружил, что у меня есть обломки двух старых установок PostgreSQL на Ubuntu 10.04:

$ pg_lsclustersVersion Cluster   Port Status Owner    Data directory                     Log file
Use of uninitialized value in printf at /usr/bin/pg_lsclusters line 38.
8.4     main      5432 down   /var/lib/postgresql/8.4/main /var/log/postgresql/postgresql-8.4-main.log  
Use of uninitialized value in printf at /usr/bin/pg_lsclusters line 38.
9.1     main      5433 down   /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log  
$

Попытки выполнить базовые функции возвращают ошибки, например:

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"?

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

$ sudo /etc/init.d/postgresql start 
 * Starting PostgreSQL 9.1 database server
 * Error: The cluster is owned by user id 109 which does not exist any more
   ...fail!
$ 

Мой вопрос: как мне полностью удалить оба кластера и настроить новый? Я попытался удалить, очистить и переустановить postgresql, следуя совету здесь: https://stackoverflow.com/a/2748644/621762 . Теперь pg_lsclusters не показывает существующих кластеров, но ошибка No such file or directory сохраняется, когда я пытаюсь выполнить createuser, createdb или запустить psql. Что мне не удалось сделать?


person brannerchinese    schedule 08.08.2012    source источник
comment
Похоже, вы пытаетесь использовать сборку PostgreSQL 9.1 с сайта backports.org, поскольку в Ubuntu 10.04 не было PostgreSQL 9.1. Правильный?   -  person Craig Ringer    schedule 09.08.2012
comment
@CraigRinger: я использовал пакеты из ppa.launchpad.net/pitti/postgresql/ubuntu.   -  person brannerchinese    schedule 09.08.2012


Ответы (2)


Во-первых, тот ответ, на который вы ссылались, был довольно небезопасным - ручное редактирование /etc/passwd ?!? dselect где подойдет подстановочный знак apt? Сумасшедшие вещи. Я не удивлен, что у тебя проблемы.

Что касается сообщений no such file or directory: вам нужно убедиться, что у вас есть работающий сервер PostgreSQL («кластер»), прежде чем вы сможете использовать команды администратора, такие как createdb, потому что они устанавливают соединение с сервером. Сообщение No such file or directory говорит вам, что сервер не существует или не работает.

Вот что происходит:

Ubuntu использует pg_wrapper для управления несколькими параллельными экземплярами PostgreSQL. Проблемы, которые у вас возникают, на самом деле связаны с pg_wrapper.

В идеале вы бы просто использовали pg_dropcluster, чтобы избавиться от нежелательных кластеров. К сожалению, из-за того, что вы последовали дурному совету, ваша система оказалась в некотором запутанном состоянии, когда пакеты PostgreSQL установлены наполовину и немного искажены. Вам нужно либо восстановить установку, либо полностью очистить ее.

Я бы почистил. Я бы рекомендовал:

  • Убедитесь, что pg_lsclusters не содержит кластеров баз данных.
  • apt-get --purge remove postgresql\* – это важно
  • Удалить /etc/postgresql/
  • Удалить /etc/postgresql-common
  • Удалить /var/lib/postgresql
  • userdel -r postgres
  • groupdel postgres
  • apt-get install postgresql-common postgresql-9.1 postgresql-contrib-9.1 postgresql-doc-9.1

Возможно, шаг apt-get --purge завершится ошибкой, потому что вы удалили идентификаторы пользователей и т. д. Повторное создание идентификатора пользователя postgres с useradd -r -u 109 postgres должно позволить вам успешно повторно запустить очистку, а затем удалить пользователя.

person Craig Ringer    schedule 09.08.2012
comment
Я вижу, что единственное, что мне не удалось сделать, это apt-get --purge remove postgresql\*. Вместо этого я только выборочно удалил (с помощью --purge) отдельные пакеты postgresql, которые я активно устанавливал. Я полагаю, что были и другие зависимости, которые я не учел. спасибо за ясное объяснение. - person brannerchinese; 09.08.2012
comment
@brannerchinese Рад, что все получилось. В будущем вы можете удалить кластер с pg_dropcluster, чтобы не путать pg_wrapper. - person Craig Ringer; 09.08.2012
comment
я сделал некоторые глупости с моими пользователями, поэтому воссоздание пользователя (а также группы) помогло мне полностью очистить вещи. - person Ian; 01.06.2017

Этот ответ касается не только удаления экземпляра postgres, но и решения проблемы.

Error: The cluster is owned by user ...

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

Ошибка напрямую связана с владением каталогом. В моем случае система не смогла найти пользователя, которому принадлежат определенные каталоги postgres в текущей среде. Повторное владение этими каталогами нужному пользователю решает проблему. Ниже приведен пример отображения (который работал у меня):

chown -R postgres:postgres /var/lib/postgresql
chown -R postgres:postgres /etc/postgresql
chown -R postgres:postgres /var/log/postgresql
chown -R postgres:postgres /var/run/postgresql
person picmate 涅    schedule 02.01.2020