cómo detener bien todos los procesos de Postgres

cómo detener bien todos los procesos de Postgres

¿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]/environps -fHC postgrespostgres

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 .psqlrcarchivo. 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/datael 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 agreguessudo

información relacionada