Käivitasin PostgreSQLis skripti/päringu/andmemuudatuse, mis "jooksis kinni". Nüüd töötab andmebaasisüsteem aeglaselt ning protsess on lukustanud tabeli/vaate/andmebaasi, mille tulemusena ei saa ma seda muuta ega kustutada. Kuidas "rippuma jäänud" PostgreSQL kasutamise sessioonidest ja nendes algatatud ressursse blokeerivates serveriprotsessidest lahti saada?

Postitas Erki Eessaar, 01.06.2022 00:00 (muudeti 27.08.2024 09:38)
Lahendust kirjeldatakse siin.

Kokkuvõtlikult:

Tuleb leida konkreetse andmebaasiga seotud sessioonid e seansid. Järgneva päringu võite käivitada tegelikult mistahes PostgreSQLi andmebaasis - st kui oma andmebaasis päringu käivitumisel jääb see toppama, siis ühenduge mõne teise andmebaasi külge.

SELECT *
FROM pg_stat_activity
WHERE datname='andmebaasi nimi väiketähtedega';

Katkesta serveriprotsess ja lõpeta selle algatanud sessioon.

SELECT pg_terminate_backend(pid);

Kõige selle automatiseerimiseks võib psqlis käivitada järgneva skripti, asendades eelnevalt t990999 selle andmebaasi nimega, kus on kinni jooksnud päring.

SELECT format('SELECT pg_terminate_backend(%1$s)', pid) AS statements
FROM pg_stat_activity
WHERE datname='t990999'
\gexec

Skript koostab päringu tulemuse põhjal format funktsiooni kasutades dünaamiliselt SQL laused ja käivitab need automaatselt gexec käsu abil.


Kas postitus oli kasulik? Hinda seda!

Keskmine hinne: Pole veel hinnanguid!


← Eelmine postitus Millised on PostgreSQLi eelised võrreldes MySQLiga (miks me ei kasuta MySQLi)? Järgmine postitus → Üritan muuta Oracles tabeli struktuuri või tabelit kustutada, kuid saan veateate <b>ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired</b>. <p>Milles on viga ja kuidas seda lahendada?