23 lines
1.3 KiB
PL/PgSQL
23 lines
1.3 KiB
PL/PgSQL
BEGIN;
|
|
CREATE TABLE public.server_probe_retired_sources (
|
|
receipt_id uuid PRIMARY KEY REFERENCES public.server_probe_storage_admissions(receipt_id),
|
|
operation_id uuid NOT NULL UNIQUE REFERENCES public.mcp_operation_replay_tombstones(operation_id),
|
|
source jsonb NOT NULL CHECK(jsonb_typeof(source)='object' AND octet_length(source::text) BETWEEN 1 AND 8192),
|
|
proof text NOT NULL CHECK(proof ~ '^[0-9a-f]{64}$'),
|
|
CHECK((source->>'version') IS NOT DISTINCT FROM '1'
|
|
AND (source->>'receiptId') IS NOT DISTINCT FROM receipt_id::text
|
|
AND (source->>'executionId') IS NOT DISTINCT FROM operation_id::text)
|
|
);
|
|
CREATE FUNCTION public.server_probe_retired_source_immutable() RETURNS trigger
|
|
LANGUAGE plpgsql SET search_path=pg_catalog,public AS $$
|
|
BEGIN
|
|
RAISE EXCEPTION 'retired diagnostic source is immutable';
|
|
END $$;
|
|
CREATE TRIGGER server_probe_retired_source_immutable
|
|
BEFORE UPDATE OR DELETE ON public.server_probe_retired_sources
|
|
FOR EACH ROW EXECUTE FUNCTION public.server_probe_retired_source_immutable();
|
|
CREATE TRIGGER server_probe_retired_source_no_truncate BEFORE TRUNCATE ON public.server_probe_retired_sources
|
|
FOR EACH STATEMENT EXECUTE FUNCTION public.server_probe_retired_source_immutable();
|
|
INSERT INTO public.schema_migrations(id) VALUES ('0050_server_probe_retired_sources') ON CONFLICT(id) DO NOTHING;
|
|
COMMIT;
|