Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
280 changes: 120 additions & 160 deletions .github/workflows/db-migrate.yaml

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions docker/postgres/init.sql
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,31 @@ WHERE content_embedding IS NULL;
CREATE INDEX IF NOT EXISTS idx_news_published_at_2025
ON news (published_at)
WHERE published_at >= '2025-01-01' AND published_at < '2026-01-01';

-- Migration history (audit trail for database migrations)
CREATE TABLE IF NOT EXISTS migration_history (
id SERIAL PRIMARY KEY,
version VARCHAR(10) NOT NULL,
name VARCHAR(255) NOT NULL,
migration_type VARCHAR(10) NOT NULL CHECK (migration_type IN ('sql', 'python')),
operation VARCHAR(10) NOT NULL CHECK (operation IN ('migrate', 'rollback', 'dry_run')),
status VARCHAR(20) NOT NULL CHECK (status IN ('success', 'failed', 'unavailable')),
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
finished_at TIMESTAMPTZ,
duration_ms INTEGER,
applied_by TEXT NOT NULL,
run_id TEXT,
description TEXT,
execution_details JSONB,
error_message TEXT
);

CREATE INDEX IF NOT EXISTS idx_mh_version ON migration_history(version);
CREATE INDEX IF NOT EXISTS idx_mh_started_at ON migration_history(started_at DESC);

CREATE OR REPLACE VIEW migration_status AS
SELECT DISTINCT ON (version)
version, name, migration_type, operation, status, applied_by, started_at, duration_ms
FROM migration_history
WHERE status = 'success'
ORDER BY version, started_at DESC;
Loading