cosmo_backend/scripts/create_db.py

60 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""
Create PostgreSQL database for Cosmo
Usage:
python scripts/create_db.py
"""
import asyncio
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from app.config import settings
import asyncpg
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def main():
"""Create database if it doesn't exist"""
# Connect to postgres database (default database)
try:
conn = await asyncpg.connect(
host=settings.database_host,
port=settings.database_port,
user=settings.database_user,
password=settings.database_password,
database="postgres", # Connect to default database
)
# Check if database exists
exists = await conn.fetchval(
"SELECT 1 FROM pg_database WHERE datname = $1",
settings.database_name
)
if exists:
logger.info(f"✓ Database '{settings.database_name}' already exists")
else:
# Create database
await conn.execute(f'CREATE DATABASE {settings.database_name}')
logger.info(f"✓ Database '{settings.database_name}' created successfully")
await conn.close()
except Exception as e:
logger.error(f"✗ Failed to create database: {e}")
logger.error("\nPlease ensure:")
logger.error(" 1. PostgreSQL is running")
logger.error(" 2. Database credentials in .env are correct")
logger.error(f" 3. User '{settings.database_user}' has permission to create databases")
sys.exit(1)
if __name__ == "__main__":
asyncio.run(main())