Impossible d'arrêter l'ancien maître de poste lors de la mise à niveau vers Postgres 9.2


13

Je passe à Postgres 9.2.2 (à partir de 9.1.4). Lorsque j'essaie de mettre à niveau les bases de données en utilisant:

pg_upgrade -b /usr/local/Cellar/postgresql/9.1.4/bin -B /usr/local/Cellar/postgresql/9.2.2/bin -d /usr/local/var/postgres91 -D /usr/local/var/postgres

Je reçois le message d'erreur suivant:

Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories                 ok

There seems to be a postmaster servicing the old cluster.
Please shutdown that postmaster and try again.
Failure, exiting

J'ai essayé d'arrêter le serveur, mais je n'arrive pas à faire fonctionner la commande de mise à niveau. Comment arrêter l'ancien maître de poste?

Réponses:


11

Le postmaster.piddevrait être dans le usr/local/vardossier de la version précédente . Le simple fait de renommer ce fichier devrait résoudre le problème.


J'ai également rencontré ce problème à quelques reprises et c'est une bonne réponse. Arrêter toutes les instances de postgres avant la mise à niveau devrait également être pertinent
Jerome

4

Sous OS X Yosemite, après avoir installé PostgreSQL via Homebrew:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

1
Cela ne résout pas le problème. Si pg_ctl -D /usr/local/var/postgres/ stoprevient No such process, alors vous devriez rm /usr/local/var/postgres/postmaster.pid.
Andrew

1

Sur la plupart des systèmes Unix, vous trouverez un script init dans /etc/init.dlequel vous pouvez utiliser pour démarrer, redémarrer, recharger ou arrêter les services Unix.

par exemple

sudo /etc/init.d/postgresql stop

Si ce n'est pas disponible, vous pouvez utiliser pg_ctl stop

par exemple

su - postgres
bash-3.1$ pg_ctl stop  # normal stop
bash-3.1$ pg_ctl stop -m s # smart stop
bash-3.1$ pg_ctl stop -m f # fast stop
bash-3.1$ pg_ctl stop -m i # immediate stop

Plus à propos pg_ctl

http://www.postgresql.org/docs/9.1/static/app-pg-ctl.html

EDIT Si vous obtenez toujours l'erreur et que vous êtes sûr que le postmaster n'est plus en cours d'exécution (vérifiez avec sudo ps aux | grep "postmaster"- ne doit renvoyer qu'une seule ligne), vous avez toujours le fichier pid après un arrêt impur

Supprimer le pidfile par exemple

> sudo -u postgres mv /var/lib/postgres/data-9.1/postmaster.pid /tmp

1
Lorsque je tente pg_ctl stop, je reçois: pg_ctl: no database directory specified and environment variable PGDATA unset. BTW, aucun serveur semble être en cours d' exécution: luciano$ ps auxwww | grep postgresluciano 995 0.0 0.0 2434892 548 s000 R+ 10:42PM 0:00.00 grep postgres.
Luciano

grep for postmaster

Réponse mise à jour avec plus d'informations

Pas de chance:sudo ps aux | grep "postmaster" luciano 3101 0.0 0.0 2434892 548 s002 S+ 9:12PM 0:00.00 grep postmaster
Luciano

Problème résolu. Voir ma réponse.
Luciano

0

Sur Ubuntu, arrêtez le service PostgreSQL avant d'effectuer la mise à niveau. Cela arrêtera toutes les instances de postgres, quelles que soient les versions installées.

service postgresql stop

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.