cosmo/scripts/create_db.py

64 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""
Create PostgreSQL database for Cosmo
Usage:
python scripts/create_db.py
"""
import asyncio
import os
import sys
from pathlib import Path
# Scripts live in <project>/scripts; app code and .env live in <project>/backend
BACKEND_DIR = Path(__file__).resolve().parent.parent / "backend"
sys.path.insert(0, str(BACKEND_DIR))
os.chdir(BACKEND_DIR)
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())