Не удалось установить Postgres, «неожиданный символ»;

Итак, сегодня утром я не смог установить Postgres 9.1 из репозитория Ubuntu. Я попытался установить 9.2 из репозитория postgres, но в случае неудачи с той же ошибкой. Трассировка ошибки действительно неинформативна (я даже не знаю, что является источником этой ошибки). Гугл мне тоже ничего не сказал.

При установке произошел сбой с той же ошибкой, и я попытался создать кластер вручную. Но...

root@Ubuntu-1304-raring-64-minimal /home/tmp # pg_createcluster 9.2 main --start
Creating new cluster (configuration: /etc/postgresql/9.2/main, data:                 /var/lib/postgresql/9.2/main)...
FATAL:  syntax error at line 5067: unexpected character ";"
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/postgresql/9.2/main"
Error: initdb failed

Что случилось?


person Spaceman    schedule 18.07.2013    source источник
comment
У вас нет ни pg9.1 от ubuntu, ни pg9.2 от pgdg, так какие у вас есть пакеты postgres? Можете ли вы показать результат COLUMNS=200 dpkg -l 'postgres*'   -  person Daniel Vérité    schedule 18.07.2013
comment
конечно, лог довольно длинный, поэтому я вставил его сюда: dpaste.com/1311318 (и вот ошибка трассировка: dpaste.com/1311319)   -  person Spaceman    schedule 20.07.2013


Ответы (2)


Согласно этому выводу из dpkg -l 'postgres*':

ii  postgresql-9.2                               9.2.4-1.pgdg12.4+1          amd64                       object-relational SQL database, version 9.2 server
un  postgresql-client                                                                              (no description available)
ii  postgresql-client-9.1                        9.1.9-1ubuntu1              amd64                       front-end programs for PostgreSQL 9.1
ii  postgresql-client-9.2                        9.2.4-1.pgdg12.4+1          amd64                       front-end programs for PostgreSQL 9.2
ii  postgresql-client-common                     140                         all                         manager for multiple PostgreSQL client versions
ii  postgresql-common                            140                         all              

postgresql-9.2 уже установлен (см. флаги ii в крайнем левом столбце), а также клиентские инструменты для 9.1 и 9.2 из репозиториев pgdg и ubuntu.

В любом случае, ошибка, с которой столкнулся pg_createcluster, довольно необычная. Из вывода, особенно номера строки, может показаться, что основной initdb дает сбой при воспроизведении файла postgres.bki.

Для 9.2 этот файл: /usr/share/postgresql/9.2/postgres.bki. Он содержит низкоуровневые команды на диалекте, похожем на sql, для заполнения кластера предварительно инициализированными данными (шаблонными базами данных, предопределенными типами и представлениями и т. д.).

Трудно представить, что этот файл будет поврежден, тем более, что у вас есть аналогичная проблема при установке 9.1, которая идет с другим файлом postgres.bki прямо из пакета.

Тем не менее, вы можете проверить на всякий случай, что находится в строке 5067 и около нее. В моем каталоге сборки для 9.2.4 у меня есть это:

insert OID = 1 ( template1 10 ENCODING "LC_COLLATE" "LC_CTYPE" t t -1 0 0 1663 _null_)

И нигде во всем файле нет символа ;.

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

# purge client packages
dpkg --purge postgresql-client-9.1 postgresql-client-9.2 postgresql-client-common
# purge server packages
dpkg --purge postgresql-9.2 postgresql-common
person Daniel Vérité    schedule 20.07.2013
comment
ничего себе, Даниил, спасибо, это имеет смысл! Теперь, когда я знаю файл, я смогу выяснить причину этой ошибки. - person Spaceman; 20.07.2013
comment
Так что это было из-за неверных настроек локали... Я добавил строки, заканчивающиеся на ';' в /etc/environment, как и для обычного bash-файла, но, похоже, мне следует избегать ввода ';' там - person Spaceman; 21.07.2013
comment
Полезно знать, но все равно странно. При столкновении с недопустимыми настройками локали pg_createcluster обычно сразу же дает сбой с предупреждениями perl, за которыми следует Error: The locale requested by the environment is invalid - person Daniel Vérité; 22.07.2013

Вы... пытаетесь установить postgres?

Любая из этих команд должна помочь вам:

sudo apt-get install postgresql-9.1
sudo apt-get install postgresql-9.2

Вот страница загрузки

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

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

person Meredith    schedule 18.07.2013
comment
Да, я пытался установить его так, как вы написали, и похоже, что установщик пытался создать кластер сам по себе. Итак, вот полный журнал: dpaste.com/1311319 - person Spaceman; 20.07.2013
comment
@Spaceman: да, создание основного кластера — это нормальный шаг установки, и в вашем случае это не удается. - person Daniel Vérité; 20.07.2013