PostgreSQL trava durante o desligamento no linux?

5

Estou usando o PostgreSQL 9.0. Ele trava durante o desligamento. quando eu usei o pg_ctl stop ele trava e depois de algum tempo ele exibe msg:

pg_ctl: server does not shut down

e quando eu usei o psql mostrando:

psql: FATAL:  the database system is shutting down

e nos logs está escrevendo estas msgs

 DEBUG:  postmaster received signal 15
2011-07-14 09:36:00 ETC/GMT LOG:  received smart shutdown request

Por favor, diga-me como resolvê-lo?

    
por Anjali 14.07.2011 / 07:09

4 respostas

7

Por padrão, pg_ctl tentará um "desligamento inteligente". Este desligamento dirá ao sistema para não aceitar novas conexões, mas não será desligado até que as existentes sejam desconectadas.

Você provavelmente deseja usar o encerramento "rápido" (executando pg_ctl -m fast ), que também desconectará os usuários existentes.

Para o Debian ( pg_ctl não é por padrão em $PATH ):

pg_ctlcluster 9.4 main restart -m fast
    
por 14.07.2011 / 10:35
3

Uma solicitação de desligamento regular aguardará até que todas as conexões sejam encerradas.

Quando pg_ctl stop "trava", isso significa que você ainda tem conexões abertas com o banco de dados. Encerre todos os aplicativos que se conectam a esse servidor e, em seguida, o Postgres deve ser desligado normalmente.

O erro "o sistema de banco de dados está sendo desligado" vem do fato de que o Postgres está tentando desligar e não permite novas conexões.

    
por 14.07.2011 / 09:07
0

Ao tentar identificar o que está acontecendo, você pode fazer login via psql e digitar:

test=> SELECT * FROM pg_stat_activity;
 datid | datname | procpid | usesysid |   usename    | application_name | client_addr | client_hostname | client_port |         backend_start         |          xact_start           |          query_start          | waiting |          current_query          
-------+---------+---------+----------+--------------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+-------------------------------+---------+---------------------------------
 18703 | test |    7604 |    18702 | test_sean | psql             |             |                 |          -1 | 2011-07-14 07:23:40.021921+00 |                               | 2011-07-14 07:23:46.398894+00 | f       | <IDLE>
 18703 | test |    7673 |    18702 | test_sean | psql             |             |                 |          -1 | 2011-07-14 07:24:54.507982+00 | 2011-07-14 07:25:00.102369+00 | 2011-07-14 07:25:00.102369+00 | f       | SELECT * FROM pg_stat_activity;
(2 rows)
    
por 14.07.2011 / 09:26
0

A menos que você queira usar pg_ctl, por que não usar o seguinte:

sudo /etc/init.d/postgresql-9.1 stop

Os problemas dos scripts init.d:

$SU -l postgres -c "$PGENGINE/pg_ctl stop -D '$PGDATA' -s -m fast" > /dev/null 2>&1 < /dev/null

Este é um desligamento rápido e executa o que você precisa.

    
por 25.04.2013 / 09:52

Tags