scam / scripts /test_postgres_connection.py
Gankit12's picture
Upload 129 files
31f0e50 verified
Raw
History Blame Contribute Delete
4.19 kB
#!/usr/bin/env python
"""
Simple script to test PostgreSQL connection and create tables.
Run this to verify your PostgreSQL setup.
"""
import os
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from dotenv import load_dotenv
# Load .env file
env_path = Path(__file__).parent.parent / ".env"
if env_path.exists():
load_dotenv(env_path)
else:
load_dotenv()
def test_connection():
"""Test PostgreSQL connection and create tables."""
print("=" * 60)
print("PostgreSQL Connection Test")
print("=" * 60)
print()
# Check POSTGRES_URL
postgres_url = os.getenv("POSTGRES_URL")
if not postgres_url:
print("[ERROR] POSTGRES_URL not found in environment")
print("Please set it in your .env file:")
print("POSTGRES_URL=postgresql://username:password@localhost:5432/database_name")
return False
# Mask password in output
if "@" in postgres_url and ":" in postgres_url.split("@")[0]:
parts = postgres_url.split("@")
user_pass = parts[0].split("//")[1]
if ":" in user_pass:
user = user_pass.split(":")[0]
masked_url = postgres_url.replace(user_pass, f"{user}:***")
else:
masked_url = postgres_url
else:
masked_url = postgres_url
print(f"POSTGRES_URL: {masked_url}")
print()
try:
from app.database.postgres import init_engine, init_database, verify_schema
print("Step 1: Initializing engine...")
init_engine()
print(" [OK] Engine initialized")
print()
print("Step 2: Checking if tables exist...")
tables_exist = verify_schema()
if tables_exist:
print(" [OK] Tables already exist")
else:
print(" [INFO] Tables not found, creating schema...")
init_database()
print(" [OK] Schema created successfully")
print()
print("Step 3: Verifying schema...")
if verify_schema():
print(" [OK] All tables and indexes verified")
else:
print(" [WARNING] Schema verification failed")
print()
print("Step 4: Testing connection...")
from app.database.postgres import get_db_connection
from sqlalchemy import text
conn = get_db_connection()
result = conn.execute(text("SELECT version()")).fetchone()
conn.close()
print(f" [OK] Connected to: {result[0][:50]}...")
print()
print("Step 5: Checking tables...")
conn = get_db_connection()
result = conn.execute(text("""
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_name
""")).fetchall()
conn.close()
if result:
print(" [OK] Found tables:")
for table in result:
print(f" - {table[0]}")
else:
print(" [WARNING] No tables found")
print()
print("=" * 60)
print("[SUCCESS] PostgreSQL is configured and working!")
print("=" * 60)
return True
except Exception as e:
print()
print("=" * 60)
print("[ERROR] Connection failed!")
print("=" * 60)
print(f"Error: {e}")
print()
print("Common issues:")
print("1. PostgreSQL server is not running")
print("2. Database doesn't exist - create it first:")
print(" CREATE DATABASE scamshield;")
print("3. User doesn't exist or password is wrong")
print("4. Connection string format is incorrect")
print()
print("Example connection string:")
print("POSTGRES_URL=postgresql://username:password@localhost:5432/scamshield")
return False
if __name__ == "__main__":
success = test_connection()
sys.exit(0 if success else 1)