34 lines
2 KiB
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;
|