Comment pouvez-vous arrêter gentiment tous les processus postgres avec pg_ctl
(ou autrement), lorsque vous ne vous rappelez pas le répertoire de la base de données, ni que la variable d'environnement PGDATA a été définie?
la source
Comment pouvez-vous arrêter gentiment tous les processus postgres avec pg_ctl
(ou autrement), lorsque vous ne vous rappelez pas le répertoire de la base de données, ni que la variable d'environnement PGDATA a été définie?
C'est sûr de:
sudo pkill -u postgres
Cela tue tous les processus exécutés en tant qu'utilisateur postgres
. Ou:
pkill postgres
Cela tue tous les processus nommés 'postgres'.
Ne pas utiliser kill -9
( kill -KILL
). Juste kill
(sans options) fait un SIGTERM
, qui est ce que vous voulez.
Vous pouvez également vérifier l'emplacement de pgdata si vous pouvez vous connecter à PostgreSQL. Par exemple:
sudo -u postgres psql -c "SHOW data_directory";
... ou en cochant ses variables d'environnement dans , où vous identifiez le postmaster . Recherchez celui qui est le parent des autres processus. Par exemple:/proc/[postmaster pid]/environ
ps -fHC postgres
postgres
postgres 794 1 0 Nov06 ? 00:00:03 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data -p 5432
postgres 857 794 0 Nov06 ? 00:00:00 postgres: logger process
postgres 871 794 0 Nov06 ? 00:00:00 postgres: checkpointer process
postgres 872 794 0 Nov06 ? 00:00:00 postgres: writer process
postgres 873 794 0 Nov06 ? 00:00:00 postgres: wal writer process
postgres 874 794 0 Nov06 ? 00:00:03 postgres: autovacuum launcher process
postgres 875 794 0 Nov06 ? 00:00:07 postgres: stats collector process
Son datadir sera généralement affiché sur sa ligne de commande.
Cela me rend nerveux de voir kill et postgres dans le même ordre. Pour répondre à la question en utilisant seulement pg_ctl
, ce serait:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
L'argument -X dit d'ignorer le .psqlrc
fichier. Ceci est utile si vous avez configuré psql pour émettre le temps nécessaire à une requête (via la commande \ timing).
L'argument -t dit de supprimer le nom de la colonne en haut de la sortie et le nombre total de lignes produites.
L'argument -c contient le code SQL à exécuter.
L'exécution d'un nu psql -c 'show data_directory'
produira probablement la sortie suivante:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Par conséquent, le fait de piquer ceci en retour $( ... )
fournira /path/to/postgresql/data
l'argument -D de pg_ctl, qui arrêtera ensuite la base de données de manière ordonnée.
PGDATA
variable d’environnement. Ma tentative d'exécution de cette commande s'est soldée par un échec car il n'y avait pas de base de données de ce type sous mon nom d'utilisateur Linux.show data_directory
peut être exécuté sans spécifier de base de données, et en effet aucun de mes serveurs n’a de base de données à mon nom. Cela n’exige pas non plus de PGDATA, je ne peux donc pas expliquer votre échec.Ce travail pour moi ref. https://stackoverflow.com/a/5408501/248616
la source