I have been struggling all weekend, to upgrade an existing postgresql database from version 8.4 to 9.1. I have (had) both versions of databases after I updated my OS from 10.0.4 to 12.04.
I finally became exasperated and in a moment of lapsed judgement, I forcibly removing all 8.4 related files from my machine, using:
find / -type d -name 8.4 2>/dev/null | xargs rm -rf {}
I decided the better way to have removed it would have been `apt-get remove postgresql-8.4'
Well when I tried that, apt-get reported:
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)
How do I purge postgresql 8.4 from my machine?
[[Edit]]
After I tried apt-get install --reinstall postgresql-8.4
, I get the following error:
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)
OK, this was really, REALLY nasty because there's a dependency nest in there that just won't go away with the usual round of apt-get purge, apt-get -f install, etc. The only way around this one (I recreated your problem in a VM and tested) is just to put a directory there for apt to get rid of in the first place.
With an empty directory there for apt to remove, both the initial purge of the parent package and the autoremoval of the child packages completed without errors in my VM.
So, given that the easy solution doesn't work, here's one that requires a bit more work and explanation, but has a better chance of success.
apt at the moment is very confused about your postgres packages. So confused even that we need to make it even more confused.
When installing/removing packages, certain scripts can be run, these are post-install, pre-install etc. scripts and live in
/var/lib/dpkg/info
. To make removal work even when these scripts fail because you messed up your system, you can add a line that saysexit 0
right after the first line in each of these scripts for the affected packages. Don't edit other scripts.The removal with
apt-get remove --purge
will then work as far as apt is concerned, but this will leave some mess behind. To remove that mess, you should reinstall the packages you removed using the neutered postrm/prerm scripts and remove them properly this time.You better start by reinstalling 8.4:
Then you can remove it with
If the reinstall fails, show us the error.
To remove postgresql and start from scratch, this worked for me:
List all the installed postgresql packages.
Then apt-get purge all of the postgresql packages returned from above command:
Example: