2016-07-31 28 views
2

läuft, kann ich nicht mein postgresql Server 9,4-9,5 aufgrund der folgenden Fehlermeldung aktualisieren:Syntaxfehler bei „=>“ wenn pg_upgrade 9,4-9,5

pg_restore: creating OPERATOR "public.->" 
pg_restore: creating OPERATOR "public.<@" 
pg_restore: creating OPERATOR "public.=>" 
pg_restore: [archiver (db)] Error while PROCESSING TOC: 
pg_restore: [archiver (db)] Error from TOC entry 1617; 2617 17937 OPERATOR => william 
pg_restore: [archiver (db)] could not execute query: ERROR: syntax error at or near "=>" 
LINE 1: CREATE OPERATOR => (
         ^
    Command was: CREATE OPERATOR => (
    PROCEDURE = "tconvert", 
    LEFTARG = "text", 
    RIGHTARG = "text" 
); 

Ich habe nicht in der Lage, etwas zu finden Relevant beim googeln. Die relevanteste Sache, die ich finden kann, ist jemand, der dieses Problem mit einer viel älteren Version von hstore vorfand, und die Reparatur ist nicht klar.

Ich benutze Homebrew auf einem Mac. Ich würde das Problem mit pg_dumpall umgehen, aber ich kann das nicht mehr ausführen, da die 9.4-Binärdateien nach dem Upgrade die Bibliotheken für 9.5 laden. Gibt es einen Weg dahin? Diese

+0

Es sieht aus wie ' "public =>."' Wahrscheinlich 'sein sollte "public" "=>"'.. (und Mischen von Versionen ist in der Regel keine gute Idee) – wildplasser

+0

Ja, aber ich habe es nicht erstellt, es ist nur ein Teil der Hstore-Erweiterung, die ich verwende. Ich mische keine Versionen, ich versuche nur, meine alten Daten von 9,4 auf 9,5 zu aktualisieren. Der einzige Grund, warum ich versuche, 9.4 jetzt zu starten, wenn 9.5 installiert ist, ist, andere Methoden zu versuchen, meine Daten zu migrieren. Ich möchte dies auf dem Produktionsserver tun, also muss ich eine brauchbare Methode finden. – wmakley

Antwort

0

Keine vollständige Lösung, aber am Ende kehrte ich zur vorherigen Version zurück und verwendete pg_dumpall, um meine Datenbanken zu sichern und sie in der neuen Version neu zu laden, wobei ich komplett vergessene Operatoren vergessen musste. In Homebrew war dies so einfach wie einen Symlink zu ändern:

cd /usr/local/lib 
rm postgresql 
ln -sv ../../Cellar/postgresql/9.4.5_2/lib/postgresql . 
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_ctl -D /usr/local/var/postgres -l logfile start # start old cluster 
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dumpall > backup.sql 
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_ctl -D /usr/local/var/postgres -l logfile stop # stop old cluster 
rm postgresql 
ln -sv ../../Cellar/postgresql/9.5.3/lib/postgresql . 

Der Rest des Upgrade-Prozesses nehme ich von https://kkob.us/2016/01/09/homebrew-and-postgresql-9-5/

Laden der Daten ist nur psql < backup.sql Keine hstore Fehler dieses Mal!

1

erwartet wird, sehen die release notes for PostgreSQL 9.5:

  • Allow => to specify named parameters in function calls (Pavel Stehule)

    Previously only := could be used. This requires removing the possibility for => to be a user-defined operator. Creation of user-defined => operators has been issuing warnings since PostgreSQL 9.0.

Sie werden einen anderen Namen für den Bediener verwenden. Es gibt keine Umgehungslösung, um PostgreSQL zu hacken.

Es könnte sein, dass Ihr Problem eine alte Installation des hstore Contrib-Moduls ist, das nie zu einer Erweiterung migriert wurde. In diesem Fall können Sie versuchen, es in der alten Datenbank zu aktualisierenvor Export wie folgt aus:

CREATE EXTENSION hstore FROM unpackaged; 

die des => Betreiber loswerden würde, die für eine lange Zeit weiterentwickelt worden ist. Sie müssten den gesamten Anwendungscode ändern, der darauf beruht.

+0

Danke, aber ich habe den Operator nicht erstellt, und ich benutze ihn nicht in meinen Prozeduren. Ich verstehe nicht, woher es kommt oder wie ich es entfernen kann, ich möchte nur meine Datenbank aktualisieren. Alles, was ich jemals installiert habe, ist völlig "out of the box". :( – wmakley

+0

Nein, es gibt keinen Operator 'public. =>' Im Kern PostgreSQL. Falls es ein Rest von einer alten 'hstore' Installation ist, habe ich meine Antwort geändert, um diesen Fall zu adressieren. –

+0

Leider gibt es einen anderen Fehler: "FEHLER: Typ" Hstore "existiert nicht" Ich habe mein Upgrade zu arbeiten, indem ich auf die alte Version und mit pg_dumpall. – wmakley