Jeśli w jakiejś sesji “wisi” zapytanie lub wykonuje się długo i chcielibyśmy to zadanie przerwać, stosujemy funkcję pg_cancel_backend(pid).
Różni się ona od pg_terminate_backend tym, że pg_terminate_backend rozłącza całą sesję, a pg_cancel_backend przerywa tylko wykonywane w ramach wskazanej sesji zapytanie nie rozłączając sesji.
W pierwszej kolejności podłączam sesję z pomocą psql i przygotowuję sobie tabelę do której będę wrzucał dużo danych. To właśnie wrzucanie danych będzie długo trwało i zostanie przerwane.
psql
create table big(x integer);
Następnie z osobnej sesji namierzam sesję w słowniku pg_stat_activity:
select * from pg_stat_activity;
Nasza sesja ma pid 613543. Wracam do pierwszej sesji i uruchamiam teraz masowe ładowanie danych do tabeli big:
insert into big select generate_series(1,10000000);
W trakcie ładowania w pierwszej sesji wykonuję z drugiej sesji z użyciem pida pierwszej sesji:
select pg_cancel_backend(613543);
Po wywołaniu tej komendy, ładowanie w pierwszej sesji zostaje przerwane z komunikatem:
Sesja trwa nadal, przerwane zostało tylko ładowanie danych.
Komentarze (0)
Brak komentarzy...