Umzugssorgen

Hallo Forum,

bin blutiger Anfänger was Datenbanklen angeht und suche deshalb hier einige Tips.
Was will ich machen:
Auf einem (ziemlich alten) Rechner läuft unter RedHat 6.2 eine PostgreSQL 6.5.3. Dieser betagte Rechner soll nun ausgetauscht werden. Und will ich die Datenbank inclusive Benutzer auf eine neuen Rechner umziehen lassen.

Bisher bereits durchgeführt:
Auf neuem Rechner ein Debian 3.1 (testing) installiert und darauf eine PostgreSQL 8.1 zum laufen gebracht. Ich habe per pg_createcluster ein neues Cluster erzeugt, in das die Datenbank rein soll.

Der Aufruf von pg_dumpall -h IP.des.Servers | psql ergibt folgende Fehlermeldung:
gandalf:~# pg_dumpall -h 172.26.3.142|psql
psql: FATAL: Datenbank »root« existiert nicht
pg_dumpall: konnte nicht mit der Datenbank »template1« verbinden: expected authentication request from server, but received U

Andreas Kretschmer hat mir bis dahin schon einige Tips gegeben und auf Seine Frage nach dem entsprechenden Eintrag in der pg_hba.conf poste ich hier noch diesen Auszug:

By default, allow anything over UNIX domain sockets and localhost.

local all trust
host all 127.0.0.1 255.255.255.255 trust

Freigabe für das lokale Netz

host all 172.26.3.0 255.255.255.0 trust

Nun weiß ich nicht weiter und hoffe auf Hilfe.

Danke,
Schultze

Versuch das mal als User ‘postgres’, nicht als root.

Das ist syntaktisch flasch. Korrekt ist:

TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

Das sind also 5 Felder, Du hast zwar auch 5, aber Du hast CIDR-Adresse auf 2 Felder verteilt.
In Deinem Fall besser wäre:

host    all    all    172.26.3.0/24     trust

Andreas

Hallo,

ich habe nun beide Hinweise umgesetzt.

in der pg_hba.conf des alten Rechners die Zeile wie von Andreas vorgeschlagen eingefügt (die andere dabei auskommentiert).

Hier das Ergebnis:
gandalf:~# psql -h 172.26.3.142 datenbank
psql: expected authentication request from server, but received U

Auf dem alten Rechner (ab jetzt nenne ich ihn “142”) erscheint in der Konsole dabei folgende Meldung:
Unsupported frontend protocol.
process_hba_record: invalid syntax in pg_hba.conf file
Missing or erroneous pg_hba.conf file, see postmaster log for details

Wo finde ich dieses “postmaster log”?

Der Versuch die gleiche Verbindung als user postgres herzustellen ergab die gleiche Fehlermeldung.

Schultze

Mit der alten pg_hba.conf bekomme ich bei obigem Vorgang diese Meldung:

Unsupported frontend protocol.
pq_recvbuf: recv() failed: Datenübergabe unterbrochen (broken pipe)

Schultze

Mmh. Aus der Newsgroup weiß ich, daß die alte PG-Version (6.5.3) ist. Irgendwann hat sich wohl zwischen dieser und den aktuellen Versionen da was im Protokoll geändert. Du kannst vielleicht mit --ignore-version was erreichen, aber ich glaube, Versionen vor 7.0 werden gar nicht mehr unterstützt.

Das ist nu a bissl schlecht, sieht wohl nach massiver Handarbeit aus…

Andreas

Wenn die Version zu alt ist, besteht ev. die Möglichkeit, eine frühe 7.x Version mal zu installieren, den Dump damit zu ziehen, dann in die 7.x Version einzuspielen und von dort mit dem pg_dump einer 8.x Version wieder zu ziehen. Dort sollte das Netzwerkprotokoll noch unterstützt werden.

Das klingt nach einem brauchbaren Plan. Ich schau mal ob ich die 7.x installiert bekomme und melde mich dann wieder.

Danke bis hierher,
Schultze

Hallo,
da bin ich wieder.

Die Version 7.4 ist die älteste, die ohne größeren Aufwand (apt-get) zu installieren war.
Beim Aufruf pg_dumpall bekomme ich nun folgende Meldung:

gandalf:~# pg_dumpall -h 172.26.3.142 -p 5432|psql
psql: FATAL: Datenbank »root« existiert nicht
pg_dumpall: Anfrage schlug fehl: ERROR: pg_shadow: Permission denied.
pg_dumpall: Anfrage war: SELECT usename, usesysid, passwd, usecreatedb, usesuper, valuntil FROM pg_shadow WHERE usesysid <> (SELECT datdba FROM pg_database WHERE datname = ‘template1’)

Das ist zumindest mal eine ganz andere Meldung. Von wo kommt jetzt diese Fehlermeldung? Von “142” oder von dem lokal installierten PostgreSQL-7.4?
Und was muss ich machen um das abzustellen?

Danke,
Schultze

Schau mal, was ich weiter oben geschrieben hatte:

Du musst vielleicht auch noch die Datenbank angeben, zu der du connecten möchtest, ‘template1’ macht hier in den meisten Fällen Sinn.



Mal eine grundsätzliche Frage: ich möchte dir nicht zu nahe treten, aber du arbeitest da mit Anwendungen, die anscheinend einige Jahre bei euch liefen und sollst das portieren, weisst jedoch nichts von Datenbanken. Sollte sich damit nicht jemand beschäftigen, der davon etwas mehr Ahnung hat? Von hier aus kann keiner abschätzen, was man dabei noch alles beachten müsste/sollte ausser den Tipps, die wir dir hier geben.

Als Nutze postgres sieht die Meldung ganz anders aus. Daraus vermute ich weiterhin eine inkompatibilität der Versionen.

pg_dumpall -h 172.26.3.142 -p 5432|psql
psql: FATAL: Datenbank »postgres« existiert nicht
pg_dumpall: Anfrage schlug fehl: ERROR: parser: parse error at or near “select”
pg_dumpall: Anfrage war: SELECT datname, (select usename from pg_shadow where usesysid=datdba), pg_encoding_to_char(d.encoding), ‘f’ as datistemplate, CASE WHEN length(datpath) > length(datname) THEN substr(datpath,1,length(datpath)-length(datname)-1) ELSE ‘’ END as datpath, ‘’ as datacl FROM pg_database d ORDER BY 1


Ich möchte ja gern alles vom alten rechner übernehmen, incl. der Benutzer.



Mal eine grundsätzliche Frage: ich möchte dir nicht zu nahe treten, aber du arbeitest da mit Anwendungen, die anscheinend einige Jahre bei euch liefen und sollst das portieren, weisst jedoch nichts von Datenbanken. Sollte sich damit nicht jemand beschäftigen, der davon etwas mehr Ahnung hat? Von hier aus kann keiner abschätzen, was man dabei noch alles beachten müsste/sollte ausser den Tipps, die wir dir hier geben.

Damit hast Du sicher prinzipiell Recht. Es verhält sich so, dass das ganze Drumherum ein Projekt von mir ist, aber die Datenbank wurde von jemandem eingerichtet, der davon mehr Ahnung hat als ich. Auf diesen Mann habe ich keinen Zugriff mehr.
Hinter der Sache steht zum Glück kein großer Zeitdruck, so dass ich mich nötigenfalls etwas in das Thema einarbeiten werde. Wollte ich aus Neugier eigentlich schon längst mal gemacht haben.
Nun sieht es so aus, als ob ich einen Grund dazu bekomme :wink:

Schultze

Jein. Die Datenbank ‘postgres’ als Template-DB kam erst mit 8.x dazu.

Andreas

Ups? Ich habe eben versucht von einer 7.4 aus eine 6.5.3 zu “dumpen”. Jetzt verstehe ich Deine Aussage dazu nicht.

Schultze

psql: FATAL: Datenbank »postgres« existiert nicht

Da ‘postgres’ erst mit 8.x dazukam, ist genannte Fehlermeldung bei Versionen kleiner 8 nicht verwunderlich.

Daher sagte ads auch, du sollst dem psql sagen, sich mit template1 zu verbinden, ohne diese Angabe versucht er, sich mit einer DB mit dem Namen des aktuellen Benutzers zu verbinden. Du machst das offensichtlich als User ‘postgres’, daher das Problem. Also hänge einfach template1 an das psql. Im Dump von pg_dumpall stehen dann \connect - Befehle, so daß es sich dann an die ‘richtigen’ Datenbanken verbindet, es muß sich aber erstmalig an einer anmelden.

Andreas

Aha. Nun scheint allerdings nur die Datenbank template1 übernommen worden zu sein. Oder verstehe ich das wieder falsch?

postgres@gandalf:~$ pg_dumpall -h 172.26.3.142 -p 5432|psql template1
pg_dumpall: Anfrage schlug fehl: ERROR: parser: parse error at or near “select”
pg_dumpall: Anfrage war: SELECT datname, (select usename from pg_shadow where usesysid=datdba), pg_encoding_to_char(d.encoding), ‘f’ as datistemplate, CASE WHEN length(datpath) > length(datname) THEN substr(datpath,1,length(datpath)-length(datname)-1) ELSE ‘’ END as datpath, ‘’ as datacl FROM pg_database d ORDER BY 1
Sie sind jetzt mit der Datenbank »template1« verbunden.
DELETE 0
CREATE USER
CREATE USER
CREATE USER
DELETE 0


Schultze