Ich versuche, Postgresql von 9.2 auf 9.3 in Fedora 18 zu aktualisieren, indem ich diesen Befehl als postgres-Benutzer verwende
$ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres
Der Fehler im Protokoll
Befehl: "/ bin / pg_ctl" -w -l "pg_upgrade_server.log" -D "/ var / lib / pgsql / data" -o "-p 50432 -b -c listen_addresses = '' -c unix_socket_permissions = 0700 -c unix_socket_directory = '/ var / lib / pgsql' "start >>" pg_upgrade_server.log "2> & 1 Warten auf den Start des Servers .... FATAL: Unbekannter Konfigurationsparameter" unix_socket_directory ".... Warten gestoppt pg_ctl: Konnte nicht starten Server
Wie durch a_horse in den Kommentaren gezeigt, wurde dieser Parameter unix_socket_directories
in 9.3 durch (plural) ersetzt. Die gestartete Serverversion ist jedoch die alte Version 9.2:
$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4
Irgendwelche Ideen?
quelle
unix_socket_directories
: postgresql.org/docs/current/static/release-9-3.html#AEN114343postgres --describe-config | grep -o 'unix_socket_director\w*'
Antworten:
Ich habe das Problem gehackt, indem ich (als root) ausgeführt habe:
Führen Sie
pg_upgrade
das Programm wie vorgesehen aus und machen Sie den Hack rückgängig:Das Problem ist, dass pg_upgrade das Programm pg_ctrl mit Argumenten ausführt, die Dateien im alten "unix_socket_directory" und nicht im neuen "unix_socket_directories" angeben (beachten Sie, dass das zweite im Plural steht). Dieser Hack benennt das Original
/usr/bin/pg_ctl
in um/usr/bin/pg_ctl-orig
und erstellt an seiner Stelle ein Shell-Skript, das einfach das ursprüngliche Programm pg_ctl aufruft und alle Argumente mit den Zeichenfolgen "unix_socket_directory" übergibt, die in "unix_socket_directories" geändert wurden.In der bash man einen Teil einer Zeichenkette ändern kann, etwa von
bar
zubaz
in einer Variablen$foo
, unter Verwendung von${foo/bar/baz}
( man beachte dies die Variable ändert sich nicht, sondern gibt den modifizierten Inhalt der Variable). Arrays können auch verwendet werden${x/y/z}
, um ein Array abzurufen, dessen gesamter Inhalt auf einmal ersetzt wurde. Die Variable$@
ist ein Array, das alle an das Programm / Skript / die Funktion übergebenen Argumente enthält. Das neue Skript pg_ctl führt das alte aus, wobei alle Argumente vom alten in das neue Verzeichnis geändert werden.quelle
Ich habe das gleiche Problem. Ich habe ein Upgrade von Fedora Repo 9.2.4 auf PGDG 9.3 durchgeführt. Die Ursache des Problems liegt darin, dass Fedora Änderungen von Parametern
unix_socket_directory
inunix_socket_directories
(siehe https://bugzilla.redhat.com/show_bug.cgi?id=853353 ) zurückportiert .Meine Lösung besteht darin, den
pg_upgrade
Quellcode mit dem Update auf eine Datei neu zu erstellen,contrib/pg_upgrade/server.c:199
in derpg_upgrade
nach der Serverversion gesucht wird:in meinem Fall ändere ich es auf:
(siehe meine Patch-Datei hier ).
quelle
unix_socket_directory
zuunix_socket_directories
in der Version 9.3. Der Fedora-Betreuer exportiert es jedoch in eine niedrigere Version. Also,pg_upgrade
von PGDG (PostgreSQL Global Development Group) erwartet YUM Repository, dass die Version 9.2.4 akzeptiertunix_socket_directory
, aber tatsächlich die Version 9.2.4 von Fedora YUM Repository akzeptiertunix_socket_directories
. In diesem Fall habe ich es geändert, um esunix_socket_directories
für Version> = 9.0 zu verwenden, da Fedora es ab Version 9.0 zurückportiert.