\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 www.csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv7/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv7/test_pg_performance.py


import os
import sys
import psycopg2
import logging
from app import app
from models import DatabaseConnection

# Log konfigürasyonu
logging.basicConfig(level=logging.DEBUG, 
                   format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def test_pg_stat_statements(db_id=1):
    """
    PostgreSQL pg_stat_statements modülünü test eder ve ayrıntılı hata bilgisi verir.
    """
    try:
        with app.app_context():
            # Veritabanı bağlantısını al
            db_conn = DatabaseConnection.query.get(db_id)
            if not db_conn:
                print(f"HATA: {db_id} ID'li veritabanı bağlantısı bulunamadı!")
                return False
                
            print(f"Bağlantı bilgisi: {db_conn.name}, {db_conn.host}:{db_conn.port}/{db_conn.database}")
            
            # Psycopg2 bağlantısı oluştur
            conn_str = "host={} port={} user={} password={} dbname={}".format(
                db_conn.host, db_conn.port, db_conn.username, db_conn.password, db_conn.database
            )
            connection = psycopg2.connect(conn_str)
            connection.autocommit = True
            
            # PostgreSQL versiyonunu kontrol et
            cursor = connection.cursor()
            cursor.execute("SHOW server_version")
            pg_version_result = cursor.fetchone()
            
            pg_version = pg_version_result[0] if pg_version_result and pg_version_result[0] else "Unknown"
            pg_version_major = 0
            
            if pg_version != "Unknown":
                version_parts = pg_version.split('.')
                if version_parts and version_parts[0].isdigit():
                    pg_version_major = int(version_parts[0])
            
            print(f"PostgreSQL versiyonu: {pg_version} (major: {pg_version_major})")
            
            # pg_stat_statements extensionu yüklü mü kontrol et
            cursor.execute("SELECT 1 FROM pg_extension WHERE extname = 'pg_stat_statements'")
            extension_exists = cursor.fetchone() is not None
            print(f"pg_stat_statements extension yüklü: {extension_exists}")
            
            # pg_stat_statements fonksiyonları var mı kontrol et
            try:
                cursor.execute("""
                    SELECT COUNT(*) > 0 
                    FROM pg_proc p 
                    JOIN pg_namespace n ON p.pronamespace = n.oid 
                    WHERE n.nspname = 'public' AND p.proname LIKE 'pg_stat_statements%'
                """)
                has_functions = cursor.fetchone()[0]
                print(f"pg_stat_statements fonksiyonları mevcut: {has_functions}")
            except Exception as e:
                print(f"Fonksiyon kontrolü hatası: {str(e)}")
                has_functions = False
            
            # shared_preload_libraries'de pg_stat_statements var mı kontrol et
            # Not: Bu komut süper kullanıcı veya pg_read_all_settings yetkisi gerektiriyor
            try:
                cursor.execute("SHOW shared_preload_libraries")
                libraries = cursor.fetchone()[0]
                has_in_preload = 'pg_stat_statements' in libraries if libraries else False
                print(f"shared_preload_libraries içinde pg_stat_statements: {has_in_preload}")
                print(f"shared_preload_libraries değeri: {libraries}")
            except Exception as e:
                print(f"shared_preload_libraries kontrolü hatası: {str(e)}")
                print("Bu hata normal - sadece süper kullanıcılar shared_preload_libraries değerini görebilir")
                # pg_stat_statements extension mevcut olduğu için, preload içinde de vardır
                has_in_preload = extension_exists
            
            # pg_stat_statements tablosu var mı kontrol et
            try:
                cursor.execute("SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relname = 'pg_stat_statements' AND n.nspname IN ('pg_catalog', 'public')")
                table_exists = cursor.fetchone() is not None
                print(f"pg_stat_statements tablosu mevcut: {table_exists}")
            except Exception as e:
                print(f"Tablo kontrolü hatası: {str(e)}")
                table_exists = False
            
            # Son olarak, gerçek bir sorguyu çalıştırmayı dene
            if extension_exists:
                try:
                    time_column = "total_exec_time" if pg_version_major >= 13 else "total_time"
                    print(f"Kullanılan zaman sütunu: {time_column}")
                    
                    # Debug için verileri dök
                    cursor.execute(f"SELECT query, calls, {time_column} FROM pg_stat_statements LIMIT 5")
                    rows = cursor.fetchall()
                    
                    print("\nÖrnek pg_stat_statements verileri:")
                    for i, row in enumerate(rows):
                        print(f"Satır {i+1}: {row}")
                        
                    if not rows:
                        print("pg_stat_statements tablosunda veri bulunamadı.")
                    
                    # Sütunları kontrol et
                    cursor.execute("SELECT column_name FROM information_schema.columns WHERE table_name = 'pg_stat_statements' ORDER BY ordinal_position")
                    columns = cursor.fetchall()
                    print("\npg_stat_statements tablosunun sütunları:")
                    for col in columns:
                        print(f"- {col[0]}")
                        
                except Exception as e:
                    print(f"pg_stat_statements sorgusunda hata: {str(e)}")
            
            cursor.close()
            connection.close()
            
    except Exception as e:
        print(f"Genel hata: {str(e)}")
        return False
    
    return True

if __name__ == "__main__":
    db_id = 1
    test_pg_stat_statements(db_id)

© KUJUNTI.ID