postgresql restore (érdekes feladat) --- MEGOLDVA

Hi,

Egy ismerős cégnél összeborult a vas (valahogy, valamiért). Volt egy kb. 50 megás postgres adatbázisuk (legyünk optimisták: van egy 50 megás postgres adatbázisuk).

A gépről file szinten lemenekítettek mindent, így van egy /var/lib/postgresql/....../data könyvtáram, ebből kellene vhogy kibányászni az adatbázist.

Tudom, hogy a postgres nem másolható így, de tettem egy próbát azzal, hogy letaroltam az egészet és átvittem egy szintén 7.4.x-es postgres-es gépre, amin előbb elpucoltam az útból az ott futó postgrest. (Az elfeküdt gépen állítólag 7.4-es etch-es postgres van, az enyémen 7.4.7-6sarge4)

Megcsináltam a data könyvtárat, bele pakoltam a tar tartalmát, kicsit meghekkeltem a pg_hba.conf-ot, hogy mindenki tudjon lokálból konnektálni és adtam egy "/etc/init.d/postgresql start"-ot.

Erre kaptam egy ilyet:

FATAL: XX000: failed to initialize lc_messages to ""
LOCATION: InitializeGUCOptions, guc.c:1880

A google szerint ez valami locale probléma, de hiába hekkeltem az ott talált megoldásokat, nem lett jobb a dolog.

A kérdéseim:
1) van-e értelme így tovább menni?
2) van-e mód "lekapcsolt" DB-ből valami util-lal kiszedni a táblaszerkezeteket és az adatokat?
3) érdemes megpróbálni egy üres gépre rárakni a /var/lib/postgres/data -t és utána apt-get install postgres?
4) hangos gúnyos röhögésen kívül még mit tennétek ilyen helyzetben?

Hozzászólások

A data könyvtár másolható, és - ha nem sérült meg a tartalma - működnie kell másik gépen is.
Az általad idézett hibaüzenettel sajnos én sem tudok mit kezdeni, megpusztult postgres-szel még nem volt dolgom.
____________________
jobbára ártalmatlan

Húztam egy etch-et, csináltam /var/lib/postgresql/7.4/main könyvtárat és belezúdítottam a letarolt cuccot, majd pg_hba.conf -ot lebutítottam, hogy mindenki hozzáférjen mindenhez és adtam egy /etc/init.d/postgresql-7.4 start-ot.

El is indult a cucc, de a psql-ben a \l (adatbázisok listája) csak a template1-et és template0-t mutatja, pedig a base könyvtár 9 mega, tehát van benne vmi.

A 9 mega és az 50 mega között azért van némi különbség :)
Az architektúra (i386 vagy amd64 pl) az stimmel?
locale beállítás lehet még probléma, de locale-t generálni nem akkora kunszt.
Ha továbbra is problémád van, és hajlandó vagy elküldeni a cuccot, akkor próbálkozhatok a megmentésével egy kicsit.
Igazából forrásból se nagy kunszt postgrest fordítani, és akkor az ilyen hibákra is lehet találni megoldást.

Mondjuk a 7.4 már elég régi, arra már nem is emlékszem, lehet hogy az még nem bírta túl jól a crasheket...

--
Gabriel Akos

Egyebkent ez teljesen hivatalos modszer, mukodnie kell. Viszont nekem vegyesek a tapasztalataim, volt hogy sikerult igy visszaallitani, de volt hogy nem. Talan a verzioelteres lehet a kulcs.

Nekem csak "/backup/var/lib/postgresql/7.4/main" könyvtáram van, abban nem data van, hanem ezek, és a base-ben van sztem a lényeg:

base
global
pg_clog
pg_hba.conf -> /etc/postgresql/7.4/main/pg_hba.conf
pg_ident.conf -> /etc/postgresql/7.4/main/pg_ident.conf
PG_VERSION
pg_xlog
postgresql.conf -> /etc/postgresql/7.4/main/postgresql.conf
postmaster.opts

Felraktam egy etch-et.
Felraktam rá postgres-t.
Leállítottam a postgres-t.
A main könyvtár tartalmát elmásoltam és kiürítettem.
A main könyvtárba bemásoltam a megmenteni kívánt cuccot.
Elindítottam a postgresql-t.
Bementem postgres nevében (su - postgres, aztán psql template1).
Adatbázis lista: \l

Name | Owner | Encoding
-----------+----------+----------
template0 | postgres | UNICODE
template1 | postgres | UNICODE

Ez gáz/szomorú.

Mindenkinek köszi a segítséget!

A main könyvtár 3. ürítése és másolása meghozta a kívánt eredményt és hirtelen megjelent a hiányzó DB a listában.

Most elvileg minden OK-nak tűnik.

Még1x köszi a ráfordított időt!