J'essaie de mettre à niveau Postgresql de 9.2 à 9.3 dans Fedora 18 en utilisant cette commande en tant qu'utilisateur 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
L'erreur dans le journal
commande: "/ 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 en attente de démarrage du serveur .... FATAL: paramètre de configuration non reconnu" unix_socket_directory ".... arrêté en attente pg_ctl: n'a pas pu démarrer serveur
Comme l'a souligné a_horse dans les commentaires, ce paramètre a été remplacé par unix_socket_directories
(pluriel) en 9.3. Mais la version du serveur démarrée est l'ancienne 9.2:
$ /bin/pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4
Des idées?
la source
unix_socket_directories
: postgresql.org/docs/current/static/release-9-3.html#AEN114343postgres --describe-config | grep -o 'unix_socket_director\w*'
Réponses:
J'ai piraté le problème en exécutant (en tant que root):
Exécutez
pg_upgrade
comme prévu, puis annulez le hack:Le problème est que pg_upgrade exécute le programme pg_ctrl avec des arguments qui spécifient des fichiers dans l'ancien "unix_socket_directory" plutôt que le nouveau "unix_socket_directories" (notez que le second est pluriel). Ce hack renomme l'original
/usr/bin/pg_ctl
en/usr/bin/pg_ctl-orig
, puis crée un script shell à sa place qui appelle simplement le programme pg_ctl d'origine, en passant tous les arguments avec toutes les chaînes "unix_socket_directory" changé en "unix_socket_directories".En bash, on peut changer une partie d'une chaîne, disons de
bar
àbaz
dans une variable$foo
, en utilisant${foo/bar/baz}
(notez que cela ne change pas la variable, mais renvoie plutôt le contenu modifié de la variable). Les tableaux peuvent également être utilisés avec${x/y/z}
pour récupérer un tableau avec tout son contenu remplacé, en une seule fois. La variable$@
est un tableau qui contient tous les arguments passés au programme / script / fonction, donc le nouveau script pg_ctl exécute l'ancien avec tous les arguments changés de l'ancien nom de répertoire au nouveau.la source
J'ai le même problème. Je passais de Fedora Repo 9.2.4 à PGDG 9.3. La source du problème est que Fedora rétroporte les modifications de paramètres
unix_socket_directory
versunix_socket_directories
(voir https://bugzilla.redhat.com/show_bug.cgi?id=853353 ).Ma solution est de reconstruire les
pg_upgrade
sources, avec mise à jour dans un fichiercontrib/pg_upgrade/server.c:199
oùpg_upgrade
vérifie la version du serveur:, dans mon cas, je le change en:
(voir mon fichier patch ici ).
la source
unix_socket_directory
àunix_socket_directories
la version 9.3. Mais le mainteneur de Fedora le rétroporte en version inférieure. Donc,pg_upgrade
de PGDG (PostgreSQL Global Development Group), YUM Repository s'attend à ce que la version 9.2.4 accepteunix_socket_directory
, mais en fait le 9.2.4 de Fedora YUM Repository accepteunix_socket_directories
. Dans ce cas, comme Fedora le rétroporte dans la version 9.0, je l'ai changé pour l'utiliserunix_socket_directories
pour la version> = 9.0.