2017-02-05 2 views
0

Ich aktualisiere Postgres von alten 7.4 zu 9.4.1 und einige Fehler zu sehen.Upgrade von Postgres 7.4 auf 9.4.1

Auf der alten Maschine, ich habe:

pg_dumpall | gzip > db_pg_bu.gz 

Auf der neuen Maschine, ich habe:

gunzip -c db_pg_bu.gz | psql 

Während der Wiederherstellung ich eine Reihe von Fehlern bekam, die ich nicht verstehe, und Ich weiß nicht wie wichtig es ist. Ich bin kein DBA, nur ein wenig Entwickler, also wenn jemand mir helfen könnte, zu verstehen, was ich tun muss, um diese Migration zu machen, würde ich es begrüßen.

Hier sind die Fehler:

ERROR: cannot delete from view "pg_shadow" 
DETAIL: Views that do not select from a single table or view are not automatically updatable. 
HINT: To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule. 

Ich habe auch etwa 15 davon:

NOTICE: SYSID can no longer be specified 

Und dies, obwohl dies seit ich harmlos aussieht sah plpgsql standardmäßig in der Version besagt, installiert ist 9.2 :

Ein großes Problem ist, dass, wie es die Datenbanken wiederherstellt, für jede ne sehe ich etwas Hing wie folgt:

COMMENT 
You are now connected to database "landrush" as user "postgres". 
SET 
ERROR: could not access file "/usr/lib/postgresql/lib/plpgsql.so": No such file or directory 
+0

Ich bin mir ziemlich sicher, die meisten von ihnen können mit Google behoben werden. [plpgsql Problem] (http://stackoverflow.com/questions/8680870/notice-using-pg-pltemplate-information-instead-create-language-parameters), [MIT SYSID] (https: //www.postgresql .org/message-id/016201c60649 $ c6254b70 $ 0264a8c0 @ demolish1) wurde entfernt und könnte Code-Änderungen erfordern, um es in Gang zu bringen. Abhängig von Ihren Erfahrungen mit PostgreSQL lohnt es sich möglicherweise, sich mit Ihrem lokalen Datenbankadministrator in Verbindung zu setzen oder separate und möglichst spezifische Fragen zu stellen (z. B. Bereitstellung von MVCEs usw.). – tambre

+0

@tambre mein Code verwendet nicht SYSID. Diese Fehlermeldung tritt auf, bevor psql eine Verbindung zu einer Datenbank herstellt. Es scheint also eine Art System-Sache zu sein. –

Antwort

1

Es gibt grundsätzlich zwei Möglichkeiten. Beides ist schwierig für Unerfahrene. (und vielleicht sogar für den erfahrenen)

  • machen Sie eine schrittweise Migration, mit ein paar Zwischenversionen (die wahrscheinlich von der Quelle kompiliert werden müssen). Zwischen den Versionen musstest du einen pg_dump machen -> pg_restore (oder einfach die psql < dumpfile, wie in der Frage). Ein möglicher erster Pfad könnte 7,4 -> 8,3 sein, aber vielleicht wird ein zusätzlicher Hop benötigt.
  • Bearbeiten Sie die (unkomprimierte) Dumpdatei: entfernen (oder auskommentieren) alles, was die neue Version nicht mag. Dies wird ein iterativer Prozess sein, und es wird davon ausgegangen, dass Ihr Dump in Ihren Editor passt. (und dass Sie wissen, was Sie tun). Möglicherweise müssen Sie redump, Trennung von Schema und Daten (Optionen --schema-only und --data-only, ich weiß nicht, ob diese in PG-7.4 verfügbar waren)
  • BTW: es ist ratsam um den pg_dump von der neueren Version (der, in die Sie importieren werden) zu verwenden. Sie müssen den Quellhost über das Flag -h angeben. Die neue (Ziel-) Version weiß, was die neue Version benötigt, und wird versuchen, sich anzupassen (bis zu einem bestimmten Punkt müssen Sie immer noch mehr als einen Schritt verwenden). Ich werde es auch ablehnen, wenn es keinen brauchbaren Speicherauszug erzeugen kann. (In diesem Fall werden Sie kleinere Schritte machen müssen ...)

    Extra:

    • wenn das Ergebnis Ihrer fehlgeschlagen Umwandlung vollständig genug ist, und wenn Sie daran interessiert sind nur in der Grund sind Daten, könnten Sie einfach hier aufhören, und vielleicht ein bisschen polieren.
    • NOTICE: using pg_pltemplate information instead of CREATE LANGUAGE parameters Ich weiß nicht, was das ist. Vielleicht die Art, wie zusätzliche Sprachen wie plpgsql zum Core dbms hinzugefügt wurden.
    • ERROR: language "plpgsql" already exists: Sie können diesen Fehler wahrscheinlich ignorieren. - >> Kommentieren Sie die beanstandeten Zeilen.
    • DETAIL: Views that do not select from a single table or view are not automatically updatable. Dies bedeutet, dass das Postgres RULE Rewrite System in der alten DB verwendet wird. Es wird ernsthafte Arbeit brauchen, damit es wieder funktioniert.
    +1

    Es lohnt sich, den Tipp von der Manpage pg_dump hinzuzufügen, um das Tool pg_dump zu verwenden, das mit der Ziel-/neuen Version übereinstimmt, um das Backup zu erstellen. – IMSoP

    +0

    Ja, ich werde das anzeigen. Vielen Dank! – wildplasser

    +0

    @wildplasser vielen Dank! Gut, dass alles sicher wie ein großer Schmerz aussieht. Ich habe einen neuen pg_dumpall mit der clean Option gemacht (habe es noch nicht mit dem neueren pg_dumpall versucht) und als ich ihn in psql eingegeben habe, schien es zu funktionieren. Die Daten wurden kopiert und Indizes erstellt. Ich kann es wieder machen nur Benutzer und so, dann ein separates Dump für die Daten. Das könnte die Bearbeitung der Datei erleichtern. Gibt es eine Möglichkeit zu sehen, ob das, was ich in die neue Version importiert habe, gut ist? Die Daten scheinen da zu sein ... –