71 lines
2.5 KiB
Bash
71 lines
2.5 KiB
Bash
#!/bin/bash
|
|
# 00-init-schema.sh
|
|
# Initialize PostgreSQL with module schema for testing
|
|
# Sprint: SPRINT_20260105_002_005_TEST_cross_cutting
|
|
# Task: CCUT-008
|
|
|
|
set -e
|
|
|
|
echo "Initializing schema for module: ${STELLAOPS_MODULE}"
|
|
echo "Schema version: ${STELLAOPS_SCHEMA_VERSION}"
|
|
|
|
# Create extensions
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
CREATE EXTENSION IF NOT EXISTS "btree_gist";
|
|
EOSQL
|
|
|
|
# Apply base schema if exists
|
|
BASE_SCHEMA="/schemas/${STELLAOPS_MODULE}/base.sql"
|
|
if [ -f "$BASE_SCHEMA" ]; then
|
|
echo "Applying base schema: $BASE_SCHEMA"
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f "$BASE_SCHEMA"
|
|
fi
|
|
|
|
# Apply versioned schema if exists
|
|
VERSION_SCHEMA="/schemas/${STELLAOPS_MODULE}/${STELLAOPS_SCHEMA_VERSION}.sql"
|
|
if [ -f "$VERSION_SCHEMA" ]; then
|
|
echo "Applying version schema: $VERSION_SCHEMA"
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f "$VERSION_SCHEMA"
|
|
fi
|
|
|
|
# Apply all migrations up to version
|
|
MIGRATIONS_DIR="/schemas/${STELLAOPS_MODULE}/migrations"
|
|
if [ -d "$MIGRATIONS_DIR" ]; then
|
|
echo "Applying migrations from: $MIGRATIONS_DIR"
|
|
|
|
# Get version number for comparison
|
|
VERSION_NUM=$(echo "$STELLAOPS_SCHEMA_VERSION" | sed 's/v//' | sed 's/\.//g')
|
|
|
|
for migration in $(ls -1 "$MIGRATIONS_DIR"/*.sql 2>/dev/null | sort -V); do
|
|
MIGRATION_VERSION=$(basename "$migration" .sql | sed 's/[^0-9]//g')
|
|
|
|
if [ -n "$VERSION_NUM" ] && [ "$MIGRATION_VERSION" -gt "$VERSION_NUM" ]; then
|
|
echo "Skipping migration $migration (version $MIGRATION_VERSION > $VERSION_NUM)"
|
|
continue
|
|
fi
|
|
|
|
echo "Applying migration: $migration"
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f "$migration"
|
|
done
|
|
fi
|
|
|
|
# Record schema version in metadata table
|
|
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
|
|
CREATE TABLE IF NOT EXISTS _schema_metadata (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT NOT NULL,
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
INSERT INTO _schema_metadata (key, value)
|
|
VALUES
|
|
('module', '${STELLAOPS_MODULE}'),
|
|
('schema_version', '${STELLAOPS_SCHEMA_VERSION}'),
|
|
('initialized_at', NOW()::TEXT)
|
|
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW();
|
|
EOSQL
|
|
|
|
echo "Schema initialization complete for ${STELLAOPS_MODULE} version ${STELLAOPS_SCHEMA_VERSION}"
|