Итак, это проблема, которую я имел несколько раз - где я случайно сделаю 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)
... и запрос живет! Как я могу убить эти вещи?
Если вы находитесь в Unix, вам может потребоваться 'kill -9'. Время от времени я получаю один из них. –
Hambone
Вы можете, конечно, убить сервер -9, но это должно быть абсолютным последним средством, так как это может привести к разложению базы данных. Если это произойдет, может потребоваться много времени, чтобы перезапустить его, пока он переводит журнал транзакций вперед до последней хорошей точки. – alzee