Postgresql Yanıt Vermeyi Kestiğinde ve Tabloya Erişemediğinizde

Kategori: Anasayfa, Programlama | 0

Gün gelir, ufak bir ALTER TABLE komutu çalıştırınız, yapmak istediğiniz sadece ufak bir “character varying” alanının maksimum boyutunu değiştirmektir.

Ancak PostgreSQL, içerisinde 15 satır bulunan 10 sütünlu bu tabloyu düzenleyemez ve ne yazık ki tabloya erişmenize de izin vermez.

Aynı zamanda bu tabloya erişim sağlayan bütün web hizmetleriniz de durur. Tabloda SELECT sorgusu bile çalışamaz hale gelir.

Eğer bahsettiğiniz şekilde sorgu çalıştırdığınız tabloya erişemiyorsanız (bunun nedeni sorgunuzun hala çalışıyor olmasıysa) ve bu olması gerekenden çok uzun sürüyorsa, yapmanız gereken bekleyen işlemi sonlandırmak olabilir.

PostgreSQL’in çalıştığı sunucuya erişim izniniz yoksa (staj…) bunu yapmak için basit SQL komutlarını kullanabilirsiniz.

SELECT * FROM pg_stat_activity;

komutuyla şu an arkada çalışan işlemleri listeleyebilirsiniz.

pg-prcs

Burada listedeki procpid sütunu bizim için önemli.

Sonlandırmak istediğimiz satırdaki procpid değerini alıp aşağıdaki sorguyu çalıştırıyoruz:

SELECT pg_cancel_backend(procpid değerini buraya yazın);

Yukarıdaki sorgu çalıştığında bize sıkıntı yaratan işlem sonlanmış olacaktır.

Diyelim ki tüm işlemleri sonlandırmak istiyorsunuz bunu da PHP ve Postgresql kullanarak halledebilirsiniz:

<?php
echo "POSTGRESQL SAÇMALIK GİDERİCİ<br>";
$con=pg_connect("host=? port=? dbname=? user=? password=?");
$q = pg_query($con,"select procpid FROM pg_stat_activity");    
    while($va = pg_fetch_array($q)){
        $proc=$va["procpid"];
        $s="SELECT pg_cancel_backend(".$proc.")";
        $a=pg_query($con,$s);
        if($a){echo $proc." iptal edildi.<br>";}
        else{echo $proc." iptal EDİLEMEDİ.<br>";}
    }
pg_close($con);
?>

Sonuç olarak yetkimiz olduğu sürece ve mümkün olduğunda tüm işlemler iptal edilmiş oldu:

pg-prcs2

Veri bütünlüğünü sağlamak açısında bu işlemleri yapmadan önce bir kez daha düşünmenizi tavsiye ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.