¿Cómo se pueden detener todos los procesos de Postgres con pg_ctl
(o de otra manera) cuando no recuerda cuál es el directorio de la base de datos ni tiene definida la variable de entorno PGDATA?
Respuesta1
Es seguro:
sudo pkill -u postgres
Eso mata todos los procesos que se ejecutan como usuario postgres
. O:
pkill postgres
Eso mata todos los procesos llamados 'postgres'.
Hacernousar kill -9
( kill -KILL
). Simplemente kill
(sin opciones) hace un SIGTERM
, que es lo que quieres.
Alternativamente, puede verificar la ubicación de pgdata si puede conectarse a PostgreSQL. Por ejemplo:
sudo -u postgres psql -c "SHOW data_directory";
...o comprobando sus variables de entorno en , donde identifica al postmaster con . Busque el que sea el padre de los otros procesos. Por ejemplo:/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
Su directorio de datos generalmente se mostrará en su línea de comando.
Respuesta2
Me pone nervioso ver kill y postgres en el mismo comando. Para responder la pregunta usando solamente pg_ctl
, sería:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
El argumento -X dice que se ignore el .psqlrc
archivo. Esto es útil si tiene psql configurado para emitir el tiempo que tarda una consulta (a través del comando \timing).
El argumento -t dice que se elimine el nombre de la columna en la parte superior de la salida y el número total de filas producidas.
El argumento -c contiene el código SQL que se ejecutará.
Ejecutar un bare psql -c 'show data_directory'
probablemente producirá el siguiente resultado:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Por lo tanto, al marcar esto $( ... )
se entregará /path/to/postgresql/data
el argumento -D de pg_ctl, que luego detendrá la base de datos de manera ordenada.
Respuesta3
Este trabajo para mí ref.https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';
Respuesta4
Simplemente puedes ejecutar el comando
systemctl stop postgresql
Cuando desees reiniciarlo, ejecuta
systemctl start postgresql
- Es probable que estos comandos requieran que agregues
sudo