Próbuję zaktualizować Postgresql z 9.2 do 9.3 w Fedorze 18, używając tego polecenia jako użytkownika postgres
$ 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
Błąd w dzienniku
polecenie: "/ 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> i 1 czeka na uruchomienie serwera .... FATAL: nierozpoznany parametr konfiguracyjny" unix_socket_directory ".... przestał czekać pg_ctl: nie można uruchomić serwer
Jak wskazał a_horse w komentarzach, parametr ten został zastąpiony przez unix_socket_directories
(liczba mnoga) w 9.3. Ale uruchamiana wersja serwera to stara 9.2:
$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4
Jakieś pomysły?
postgresql
upgrade
Clodoaldo
źródło
źródło
unix_socket_directories
: postgresql.org/docs/current/static/release-9-3.html#AEN114343postgres --describe-config | grep -o 'unix_socket_director\w*'
Odpowiedzi:
Zhakowałem problem, uruchamiając (jako root):
Uruchom
pg_upgrade
zgodnie z przeznaczeniem, a następnie cofnij włamanie:Problem polega na tym, że pg_upgrade wykonuje program pg_ctrl z argumentami, które określają pliki w starym „katalogu_socket_directory” zamiast w nowych „katalogach_socket_xocket” (zauważ, że drugi jest w liczbie mnogiej). Ten Hack zmienia nazwę oryginalnego
/usr/bin/pg_ctl
do/usr/bin/pg_ctl-orig
, a następnie tworzy skrypt na swoim miejscu, że po prostu wywołuje oryginalny program pg_ctl, przekazując wszystkie argumenty ze strun „unix_socket_directory” zmieniono na „unix_socket_directories”.W bashu można zmienić część ciągu, powiedzmy od
bar
dobaz
w zmiennej$foo
, używając${foo/bar/baz}
(zauważ, że to nie zmienia zmiennej, ale zwraca zmodyfikowaną zawartość zmiennej). Tablic można również używać${x/y/z}
do pobierania tablicy z całą zawartością zastąpioną jednocześnie. Zmienna$@
jest tablicą zawierającą wszystkie argumenty przekazane do programu / skryptu / funkcji, więc nowy skrypt pg_ctl wykonuje stary ze wszystkimi argumentami zmienionymi ze starej nazwy katalogu na nowy.źródło
Mam ten sam problem. Uaktualniałem z wersji Fedora Repo 9.2.4 do PGDG 9.3. Źródłem problemu jest to, że Fedora backportuje zmiany parametru
unix_socket_directory
naunix_socket_directories
(patrz https://bugzilla.redhat.com/show_bug.cgi?id=853353 ).Moim rozwiązaniem jest przebudowanie
pg_upgrade
ze źródeł, z aktualizacją do pliku, wcontrib/pg_upgrade/server.c:199
którympg_upgrade
sprawdza się wersję serwera:, w moim przypadku zmieniam na:
(zobacz mój plik łatek tutaj ).
źródło
unix_socket_directory
naunix_socket_directories
w wersji 9.3. Ale opiekun Fedory przenosi go do niższej wersji. Tak więcpg_upgrade
z PGDG (PostgreSQL Global Development Group) repozytorium YUM oczekuje, że wersja 9.2.4 zaakceptujeunix_socket_directory
, ale tak naprawdę 9.2.4 z repozytorium YUM Fedory to zaakceptujeunix_socket_directories
. W tym przypadku, ponieważ Fedora backportuje go do wersji 9.0 i nowszych, zmieniłem go, aby używałunix_socket_directories
dla wersji> = 9.0.