Все выходные я изо всех сил пытался обновить существующую базу данных postgresql с версии 8.4 до 9.1. У меня есть (были) обе версии баз данных после того, как я обновил свою ОС с 10.0.4 до 12.04.
Я, наконец, разозлился, и в момент истечения срока суда я принудительно удалил все 8.4 связанные файлы с моей машины, используя:
find / -type d -name 8.4 2>/dev/null | xargs rm -rf {}
Я решил, что лучше удалено это было бы `apt-get remove postgresql-8.4 '
Хорошо, когда я попробовал это, apt-get сообщил:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
postgresql-8.4
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 15.5 MB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 304184 files and directories currently installed.)
Removing postgresql-8.4 ...
find: `/usr/share/postgresql/8.4/tsearch_data': No such file or directory
dpkg: error processing postgresql-8.4 (--remove):
subprocess installed pre-removal script returned error exit status 1
Errors were encountered while processing:
postgresql-8.4
E: Sub-process /usr/bin/dpkg returned an error code (1)
Как мне удалить postgresql 8.4 с моей машины?
[[Редактировать]]
После того, как я попробовал apt-get install --reinstall postgresql-8.4
, я получаю следующую ошибку:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
oidentd ident-server
The following NEW packages will be installed:
postgresql-8.4
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/5,599 kB of archives.
After this operation, 15.5 MB of additional disk space will be used.
Selecting previously unselected package postgresql-8.4.
(Reading database ... 304010 files and directories currently installed.)
Unpacking postgresql-8.4 (from .../postgresql-8.4_8.4.14-0ubuntu12.04.2_amd64.deb) ...
Setting up postgresql-client-8.4 (8.4.14-0ubuntu12.04.2) ...
update-alternatives: error: alternative path /usr/share/postgresql/8.4/man/man1/psql.1.gz doesn't exist.
dpkg: error processing postgresql-client-8.4 (--configure):
subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of postgresql-8.4:
postgresql-8.4 depends on postgresql-client-8.4; however:
Package postgresql-client-8.4 is not configured yet.
dpkg: error processing postgresql-8.4 (--configure):
dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
Errors were encountered while processing:
postgresql-client-8.4
postgresql-8.4
E: Sub-process /usr/bin/dpkg returned an error code (1)
Хорошо, это было действительно, ДЕЙСТВИТЕЛЬНО неприятно, потому что там есть гнездо зависимостей, которое просто не исчезнет с обычным циклом очистки apt-get, установки apt-get -f и т. Д. Единственный способ обойти это (Я воссоздал вашу проблему в виртуальной машине и протестировал ее) просто для того, чтобы поместить туда каталог, от которого в первую очередь избавится apt.
root@yourbox:/# mkdir -p /usr/share/postgresql/8.4/tsearch_data
root@yourbox:/# apt-get purge postgresql-8.4
root@yourbox:/# apt-get autoremove
С пустым каталогом, который можно удалить apt, начальная очистка родительского пакета и автоматическое удаление дочерних пакетов завершилось без ошибок в моей виртуальной машине.
Итак, учитывая, что простое решение не работает, вот то, которое требует немного больше работы и объяснений, но имеет больше шансов на успех.
apt в настоящий момент очень смущен вашими пакетами postgres. Настолько смущенный, что нам нужно сделать его еще более запутанным.
При установке / удалении пакетов можно запускать определенные сценарии, например, сценарии после установки, предварительной установки и т. Д., И они находятся в /var/lib/dpkg/info
. Чтобы удаление работало даже в случае сбоя этих сценариев из-за того, что вы испортили систему, вы можете добавить строку с надписью exit 0
сразу после первой строки в каждом из этих сценариев для затронутых пакетов. Не редактируйте другие скрипты.
Удаление с помощью apt-get remove --purge
будет работать, насколько это возможно, но это оставит некоторый беспорядок. Чтобы удалить этот беспорядок, вы должны переустановить пакеты, которые вы удалили, используя стерилизованные сценарии postrm / prerm, и на этот раз удалить их должным образом.
Чтобы удалить postgresql и начать с нуля, это сработало для меня:
Список всех установленных пакетов postgresql.
dpkg -l | grep post
Затем apt-get purge все пакеты postgresql, возвращенные вышеуказанной командой:
Пример:
apt-get purge postgresql postgresql-client postgresql-client-common postgresql-common postgresql-contrib postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6
Лучше начать с переустановки 8.4:
sudo apt-get install --reinstall postgresql-8.4
Затем вы можете удалить ее с помощью
sudo apt-get remove --purge postgresql-8.4
Если переустановка не удалась, покажите нам ошибку.