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?

Luciano
la source

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.

Luciano
la source
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
Sarah Vessels
la source
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
Michel Feldheim
la source
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

scarver2
la source