60 lines
1.7 KiB
Python
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())
|