19 lines
1.2 KiB
PL/PgSQL
19 lines
1.2 KiB
PL/PgSQL
BEGIN;
|
|
CREATE OR REPLACE FUNCTION public.mcp_ordinary_retirement_claim_immutable() RETURNS trigger
|
|
LANGUAGE plpgsql SET TimeZone='UTC' SET search_path=pg_catalog,public AS $$
|
|
BEGIN
|
|
IF TG_OP='INSERT' AND NEW.claim_xid=pg_current_xact_id() AND EXISTS(
|
|
SELECT 1 FROM public.mcp_operations o JOIN public.mcp_plans p ON p.id=o.plan_id AND p.connection_id=o.connection_id
|
|
WHERE o.id=NEW.operation_id AND o.plan_id=NEW.plan_id AND o.connection_id=NEW.connection_id
|
|
AND o.state='applied' AND o.verification='passed' AND o.error_code IS NULL
|
|
AND isfinite(o.finished_at) AND o.finished_at<transaction_timestamp()-interval '180 days'
|
|
AND (p.operation_id,p.operation_version) IN (
|
|
('logs.settings.update',1),('traffic.settings.update',2),('uptime.settings.update',2),
|
|
('servers.api-ping.settings.update',2),('internet-path.settings.update',1),('geoip.settings.update',1),('backups.schedule.update',1)
|
|
) AND p.state='completed'
|
|
) THEN RETURN NEW; END IF;
|
|
RAISE EXCEPTION 'ordinary operation retirement claim cannot be replaced or reopened';
|
|
END $$;
|
|
INSERT INTO public.schema_migrations(id) VALUES ('0055_mcp_backup_schedule_retirement') ON CONFLICT(id) DO NOTHING;
|
|
COMMIT;
|