owpengram-server/deploy/migrations/0052_bootstrap_update_jobs.up.sql

34 lines
2 KiB
SQL

CREATE TABLE IF NOT EXISTS public.bootstrap_update_jobs (
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
kind character varying(32) NOT NULL,
user_id bigint NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
auth_key_id bigint DEFAULT 0 NOT NULL,
session_id bigint DEFAULT 0 NOT NULL,
message_box_id integer NOT NULL,
status character varying(16) DEFAULT 'pending'::character varying NOT NULL,
attempts integer DEFAULT 0 NOT NULL,
last_error text DEFAULT ''::text NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
ready_at timestamp with time zone,
published_at timestamp with time zone,
CONSTRAINT bootstrap_update_jobs_kind_check CHECK ((kind)::text = ANY (ARRAY[('login_message'::character varying)::text])),
CONSTRAINT bootstrap_update_jobs_status_check CHECK ((status)::text = ANY (ARRAY[('pending'::character varying)::text, ('ready'::character varying)::text, ('publishing'::character varying)::text, ('published'::character varying)::text, ('failed'::character varying)::text])),
CONSTRAINT bootstrap_update_jobs_message_box_fkey FOREIGN KEY (user_id, message_box_id) REFERENCES public.message_boxes(owner_user_id, box_id) ON DELETE CASCADE
);
CREATE UNIQUE INDEX IF NOT EXISTS bootstrap_update_jobs_unique_login
ON public.bootstrap_update_jobs (kind, user_id, message_box_id);
CREATE INDEX IF NOT EXISTS bootstrap_update_jobs_ready_idx
ON public.bootstrap_update_jobs (COALESCE(ready_at, created_at), user_id, id)
WHERE (status)::text = 'ready'::text;
CREATE INDEX IF NOT EXISTS bootstrap_update_jobs_publishing_stale_idx
ON public.bootstrap_update_jobs (updated_at, user_id, id)
WHERE (status)::text = 'publishing'::text;
CREATE INDEX IF NOT EXISTS user_update_events_new_message_box_idx
ON public.user_update_events (user_id, message_box_id, pts)
WHERE (event_type)::text = 'new_message'::text
AND message_box_id IS NOT NULL;