Files
EvoBGP/migrations/postgres/000025_maintenance_policies.up.sql
T
DenozordecandCursor 948dac34fd feat(db): add maintenance_policy migration 000025
Добавлены таблицы maintenance_policy и maintenance_policy_config_audit для postgres и sqlite; в postgres_maintenance_audit — колонка policy_id.

Co-authored-by: Cursor <[email protected]>
2026-06-12 13:19:27 +07:00

48 lines
1.7 KiB
SQL

CREATE TABLE IF NOT EXISTS maintenance_policy (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
table_name TEXT NOT NULL,
condition_sql TEXT NOT NULL DEFAULT 'true',
retention_period_sec INTEGER,
max_rows INTEGER,
vacuum_strategy TEXT NOT NULL DEFAULT 'none',
schedule_cron TEXT NOT NULL,
enabled BOOLEAN NOT NULL DEFAULT true,
dry_run_enabled BOOLEAN NOT NULL DEFAULT false,
last_run_at TIMESTAMPTZ,
last_status TEXT,
last_error TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT maintenance_policy_name_chk CHECK (length(trim(name)) > 0),
CONSTRAINT maintenance_policy_table_name_chk CHECK (length(trim(table_name)) > 0),
CONSTRAINT maintenance_policy_vacuum_strategy_chk CHECK (
vacuum_strategy IN ('none', 'vacuum', 'analyze', 'vacuum_analyze', 'reindex')
)
);
CREATE INDEX IF NOT EXISTS idx_maintenance_policy_enabled
ON maintenance_policy (enabled);
CREATE TABLE IF NOT EXISTS maintenance_policy_config_audit (
id TEXT PRIMARY KEY,
policy_id TEXT,
actor_prefix TEXT NOT NULL,
action TEXT NOT NULL,
before_json JSONB,
after_json JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
CONSTRAINT maintenance_policy_config_audit_action_chk CHECK (
action IN ('create', 'update', 'delete')
)
);
CREATE INDEX IF NOT EXISTS idx_maintenance_policy_config_audit_created
ON maintenance_policy_config_audit (created_at DESC);
ALTER TABLE postgres_maintenance_audit
ADD COLUMN IF NOT EXISTS policy_id TEXT REFERENCES maintenance_policy (id) ON DELETE SET NULL;
CREATE INDEX IF NOT EXISTS idx_postgres_maintenance_audit_policy
ON postgres_maintenance_audit (policy_id);