2015-12-15 7 views
2

Итак, это проблема, которую я имел несколько раз - где я случайно сделаю SELECT * из гигантской базы данных. Обычно я просто заходил, получал pid запроса (SELECT * FROM pg_stat_activity), а затем выполнял SELECT pg_cancel_backend (PID здесь), и он заканчивался. Но иногда - особенно с запросами, которые в конечном счете дают нелепое количество строк - это просто возвращает это:Не удается убить запрос Postgres

db=# select pg_cancel_backend(5246); 
pg_cancel_backend 
------------------- 
t 
(1 row) 

... и запрос живет! Как я могу убить эти вещи?

+0

Если вы находитесь в Unix, вам может потребоваться 'kill -9 '. Время от времени я получаю один из них. – Hambone

+1

Вы можете, конечно, убить сервер -9, но это должно быть абсолютным последним средством, так как это может привести к разложению базы данных. Если это произойдет, может потребоваться много времени, чтобы перезапустить его, пока он переводит журнал транзакций вперед до последней хорошей точки. – alzee

ответ

Смежные вопросы