como parar bem todos os processos postgres

18

Como você interrompe muito bem todos os processos postgres com pg_ctl (ou outro), quando você não lembra qual é o diretório do banco de dados, nem a variável de ambiente PGDATA está definida?

    
por matt 09.11.2014 / 09:24

2 respostas

34

É seguro:

sudo pkill -u postgres

(mata todos os procs em execução como usuário postgres ) ou

pkill postgres

(mata todos os procs chamados 'postgres')

Não use kill -9 ( kill -KILL ). kill sem opções faz um SIGTERM , que é o que você quer.

Como alternativa, você pode verificar o local do pgdata se conseguir se conectar a Pg, por exemplo,

sudo -u postgres psql -c "SHOW data_directory";

... ou verificando suas variáveis de ambiente em /proc/[postmaster pid]/environ

onde você identifica o postmaster com ps -fHC postgres ; procure aquele que é o pai dos outros postgres processos, por exemplo

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   

Seu datadir geralmente será mostrado em sua linha de comando.

    
por Craig Ringer 09.11.2014 / 10:55
1

Isso me deixa nervoso vendo kill e postgres no mesmo comando. Para responder a pergunta usando apenas pg_ctl , isso seria:

pg_ctl -D $(psql -Xtc 'show data_directory') stop
    
por dland 30.05.2018 / 11:00

Tags