rwadurian/backend/services/scripts/init-databases.sh

73 lines
2.7 KiB
Bash

#!/bin/bash
set -e
# Function to create database if not exists
create_database() {
local database=$1
echo "Creating database: $database"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
SELECT 'CREATE DATABASE $database'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$database')\gexec
EOSQL
}
# Create all required databases
for db in rwa_identity rwa_wallet rwa_mpc rwa_backup rwa_planting rwa_referral rwa_reward rwa_leaderboard rwa_reporting rwa_authorization rwa_admin rwa_presence rwa_blockchain; do
create_database "$db"
done
echo "All databases created successfully!"
# =============================================================================
# Configure PostgreSQL for Debezium CDC (Logical Replication)
# =============================================================================
echo "Configuring PostgreSQL for Debezium CDC..."
# Set wal_level to logical for CDC support
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
-- Set wal_level to logical (requires restart to take effect)
ALTER SYSTEM SET wal_level = 'logical';
-- Increase max_replication_slots for Debezium
ALTER SYSTEM SET max_replication_slots = 4;
-- Increase max_wal_senders for replication connections
ALTER SYSTEM SET max_wal_senders = 4;
-- Create replication user for Debezium (if not exists)
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'debezium') THEN
CREATE ROLE debezium WITH REPLICATION LOGIN PASSWORD 'debezium_password';
END IF;
END
\$\$;
-- Grant connect to identity and referral databases
GRANT CONNECT ON DATABASE rwa_identity TO debezium;
GRANT CONNECT ON DATABASE rwa_referral TO debezium;
EOSQL
# Grant schema permissions on rwa_identity
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "rwa_identity" <<-EOSQL
-- Grant usage on public schema
GRANT USAGE ON SCHEMA public TO debezium;
-- Grant select on all tables (current and future)
GRANT SELECT ON ALL TABLES IN SCHEMA public TO debezium;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO debezium;
EOSQL
# Grant schema permissions on rwa_referral
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "rwa_referral" <<-EOSQL
-- Grant usage on public schema
GRANT USAGE ON SCHEMA public TO debezium;
-- Grant select on all tables (current and future)
GRANT SELECT ON ALL TABLES IN SCHEMA public TO debezium;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO debezium;
EOSQL
echo "PostgreSQL CDC configuration completed!"
echo "NOTE: PostgreSQL restart is required for wal_level change to take effect."