-- PostgreSQL Database Initialization Script for MY Uploader Bot -- This script sets up the initial database structure and users -- Create database if not exists (done by PostgreSQL container initialization) -- Create user and grant privileges are also handled by container environment variables -- Set up database encoding and collation (handled by POSTGRES_INITDB_ARGS) -- Create extensions if needed CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pg_trgm"; CREATE EXTENSION IF NOT EXISTS "btree_gin"; -- Create schemas for better organization CREATE SCHEMA IF NOT EXISTS my_network; CREATE SCHEMA IF NOT EXISTS content; CREATE SCHEMA IF NOT EXISTS users; CREATE SCHEMA IF NOT EXISTS analytics; -- Grant permissions on schemas GRANT USAGE, CREATE ON SCHEMA my_network TO my_user; GRANT USAGE, CREATE ON SCHEMA content TO my_user; GRANT USAGE, CREATE ON SCHEMA users TO my_user; GRANT USAGE, CREATE ON SCHEMA analytics TO my_user; -- Set default search path ALTER DATABASE my_uploader_db SET search_path TO public, my_network, content, users, analytics; -- Create initial tables structure (if not handled by ORM migrations) -- These will be created by the application's migration system -- Example: Create a simple health check table CREATE TABLE IF NOT EXISTS health_check ( id SERIAL PRIMARY KEY, status VARCHAR(50) NOT NULL DEFAULT 'ok', timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(), details JSONB ); -- Insert initial health check record INSERT INTO health_check (status, details) VALUES ('initialized', '{"message": "Database initialized successfully", "version": "1.0.0"}') ON CONFLICT DO NOTHING; -- Create indexes for better performance CREATE INDEX IF NOT EXISTS idx_health_check_timestamp ON health_check(timestamp); CREATE INDEX IF NOT EXISTS idx_health_check_status ON health_check(status); -- Log successful initialization INSERT INTO health_check (status, details) VALUES ('ready', '{"message": "PostgreSQL initialization completed", "timestamp": "' || NOW() || '"}'); COMMENT ON DATABASE my_uploader_db IS 'MY Uploader Bot - Main database for content management and MY Network protocol'; COMMENT ON SCHEMA my_network IS 'MY Network protocol related tables and functions'; COMMENT ON SCHEMA content IS 'Content storage and management tables'; COMMENT ON SCHEMA users IS 'User management and authentication tables'; COMMENT ON SCHEMA analytics IS 'Analytics and metrics tables';