PostgreSQL – Starting 9.2 Data Directory Using 8.4 Server

postgresql

I have an old version of postgres (8.4.13) that doesn't run for various reasons. I plan to move the database files in there to a new install of postgres 9.3. How would I go about doing this? For one I can not start up postgres when I run:

postgres -D /var/lib/pgsql/9.2/data

As I get :

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 8.4.13.

The easiest route would be to figuring out how to run this server but if not how would I locate the db files in it?

EDIT:

How this actually happened was last week I wanted to intiliaze postgres server commands so I could easily stop and restart the server since my knowledge of postgresql is pretty limited. I ended up installing postgresql-server for RHEL and it was initially working fine. The commands weren't working so I forgot about it. The databases were working fine too at that time. I log on today and to my shock the commands were working but it also wiped the dbs. So my presumption is it installed a completely new server that could be accessed via the commands.

Somehow this tampered whatever settings I had.

Typing postgresql –version gives me version 8.4.13.
If I can only start it now by pointing postgres -D to the correct pgsql.

There are two pgsql dirs:

/var/lib/pgsql/9.2/data
/var/lib/pgsql/data

The latter seems to be the newest install of postgresql as the pg_hba.conf files are unedited.

I used to be able to start the 8.4.13 server with 9.2 it would just give me a WARNING: Some features might not be available. I don't know why installing postgresql-server would change this now. As they are separate dirs.

Best Answer

Only the same major version can read the data files.

You need to upgrade properly. To do that you'll have to install 8.4, then use pg_upgrade, or use pg_dump and pg_restore. See the manual for more information.

That said, the error actually has the versions the other way around - it says you're running 8.4 binaries and trying to point them at a datadir from 9.2. Verify this with postgres --version. If you turn out to have 8.4 binaries and a 9.2 datadir then pg_upgrade won't do you any good - you just need to install 9.2 (or use the correct PATH if it's already installed) and run the 9.2 datadir using 9.2 binaries.


Update given extra info in question:

It is very likely that both 8.4 and 9.2 are running fine on your machine, just on different ports.

sudo netstat -ltnp |grep postgres

will show you listening PostgreSQL servers, and

psql -p 5433

(or whatever) will connect to a different port.

The databases appeared to vanish because when you installed the new PostgreSQL it became the default version that's run.

If you find that the 8.4 install is in fact not running, you probably just need to change the port it starts on in its configuration so it runs on a different port, then connect to it as shown above.