Files
zed/crates/collab/migrations/20251208000000_test_schema.sql
Marshall Bowers 8d44bcd4f9 collab: Remove database migrations (#44436)
This PR removes the database schema migrations from the repo, as these
are now managed by Cloud.

There's a new `20251208000000_test_schema.sql` "migration" that we use
to create the database schema for the tests, similar to what we use for
SQLite.

Release Notes:

- N/A
2025-12-08 17:53:14 -05:00

900 lines
33 KiB
SQL

CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public;
CREATE TABLE public.access_tokens (
id integer NOT NULL,
user_id integer,
hash character varying(128),
impersonated_user_id integer
);
CREATE SEQUENCE public.access_tokens_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.access_tokens_id_seq OWNED BY public.access_tokens.id;
CREATE TABLE public.breakpoints (
id integer NOT NULL,
project_id integer NOT NULL,
"position" integer NOT NULL,
log_message text,
worktree_id bigint NOT NULL,
path text NOT NULL,
kind character varying NOT NULL
);
CREATE SEQUENCE public.breakpoints_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.breakpoints_id_seq OWNED BY public.breakpoints.id;
CREATE TABLE public.buffer_operations (
buffer_id integer NOT NULL,
epoch integer NOT NULL,
replica_id integer NOT NULL,
lamport_timestamp integer NOT NULL,
value bytea NOT NULL
);
CREATE TABLE public.buffer_snapshots (
buffer_id integer NOT NULL,
epoch integer NOT NULL,
text text NOT NULL,
operation_serialization_version integer NOT NULL
);
CREATE TABLE public.buffers (
id integer NOT NULL,
channel_id integer NOT NULL,
epoch integer DEFAULT 0 NOT NULL,
latest_operation_epoch integer,
latest_operation_lamport_timestamp integer,
latest_operation_replica_id integer
);
CREATE SEQUENCE public.buffers_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.buffers_id_seq OWNED BY public.buffers.id;
CREATE TABLE public.channel_buffer_collaborators (
id integer NOT NULL,
channel_id integer NOT NULL,
connection_id integer NOT NULL,
connection_server_id integer NOT NULL,
connection_lost boolean DEFAULT false NOT NULL,
user_id integer NOT NULL,
replica_id integer NOT NULL
);
CREATE SEQUENCE public.channel_buffer_collaborators_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.channel_buffer_collaborators_id_seq OWNED BY public.channel_buffer_collaborators.id;
CREATE TABLE public.channel_chat_participants (
id integer NOT NULL,
user_id integer NOT NULL,
channel_id integer NOT NULL,
connection_id integer NOT NULL,
connection_server_id integer NOT NULL
);
CREATE SEQUENCE public.channel_chat_participants_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.channel_chat_participants_id_seq OWNED BY public.channel_chat_participants.id;
CREATE TABLE public.channel_members (
id integer NOT NULL,
channel_id integer NOT NULL,
user_id integer NOT NULL,
accepted boolean DEFAULT false NOT NULL,
updated_at timestamp without time zone DEFAULT now() NOT NULL,
role text NOT NULL
);
CREATE SEQUENCE public.channel_members_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.channel_members_id_seq OWNED BY public.channel_members.id;
CREATE TABLE public.channels (
id integer NOT NULL,
name character varying NOT NULL,
created_at timestamp without time zone DEFAULT now() NOT NULL,
visibility text DEFAULT 'members'::text NOT NULL,
parent_path text NOT NULL,
requires_zed_cla boolean DEFAULT false NOT NULL,
channel_order integer DEFAULT 1 NOT NULL
);
CREATE SEQUENCE public.channels_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.channels_id_seq OWNED BY public.channels.id;
CREATE TABLE public.contacts (
id integer NOT NULL,
user_id_a integer NOT NULL,
user_id_b integer NOT NULL,
a_to_b boolean NOT NULL,
should_notify boolean NOT NULL,
accepted boolean NOT NULL
);
CREATE SEQUENCE public.contacts_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.contacts_id_seq OWNED BY public.contacts.id;
CREATE TABLE public.contributors (
user_id integer NOT NULL,
signed_at timestamp without time zone DEFAULT now() NOT NULL
);
CREATE TABLE public.extension_versions (
extension_id integer NOT NULL,
version text NOT NULL,
published_at timestamp without time zone DEFAULT now() NOT NULL,
authors text NOT NULL,
repository text NOT NULL,
description text NOT NULL,
download_count bigint DEFAULT 0 NOT NULL,
schema_version integer DEFAULT 0 NOT NULL,
wasm_api_version text,
provides_themes boolean DEFAULT false NOT NULL,
provides_icon_themes boolean DEFAULT false NOT NULL,
provides_languages boolean DEFAULT false NOT NULL,
provides_grammars boolean DEFAULT false NOT NULL,
provides_language_servers boolean DEFAULT false NOT NULL,
provides_context_servers boolean DEFAULT false NOT NULL,
provides_slash_commands boolean DEFAULT false NOT NULL,
provides_indexed_docs_providers boolean DEFAULT false NOT NULL,
provides_snippets boolean DEFAULT false NOT NULL,
provides_debug_adapters boolean DEFAULT false NOT NULL,
provides_agent_servers boolean DEFAULT false NOT NULL
);
CREATE TABLE public.extensions (
id integer NOT NULL,
name text NOT NULL,
external_id text NOT NULL,
latest_version text NOT NULL,
total_download_count bigint DEFAULT 0 NOT NULL
);
CREATE SEQUENCE public.extensions_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.extensions_id_seq OWNED BY public.extensions.id;
CREATE TABLE public.feature_flags (
id integer NOT NULL,
flag character varying(255) NOT NULL,
enabled_for_all boolean DEFAULT false NOT NULL
);
CREATE SEQUENCE public.feature_flags_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.feature_flags_id_seq OWNED BY public.feature_flags.id;
CREATE TABLE public.followers (
id integer NOT NULL,
room_id integer NOT NULL,
project_id integer NOT NULL,
leader_connection_server_id integer NOT NULL,
leader_connection_id integer NOT NULL,
follower_connection_server_id integer NOT NULL,
follower_connection_id integer NOT NULL
);
CREATE SEQUENCE public.followers_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.followers_id_seq OWNED BY public.followers.id;
CREATE TABLE public.language_servers (
project_id integer NOT NULL,
id bigint NOT NULL,
name character varying NOT NULL,
capabilities text NOT NULL,
worktree_id bigint
);
CREATE TABLE public.notification_kinds (
id integer NOT NULL,
name character varying NOT NULL
);
CREATE SEQUENCE public.notification_kinds_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.notification_kinds_id_seq OWNED BY public.notification_kinds.id;
CREATE TABLE public.notifications (
id integer NOT NULL,
created_at timestamp without time zone DEFAULT now() NOT NULL,
recipient_id integer NOT NULL,
kind integer NOT NULL,
entity_id integer,
content text,
is_read boolean DEFAULT false NOT NULL,
response boolean
);
CREATE SEQUENCE public.notifications_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.notifications_id_seq OWNED BY public.notifications.id;
CREATE TABLE public.observed_buffer_edits (
user_id integer NOT NULL,
buffer_id integer NOT NULL,
epoch integer NOT NULL,
lamport_timestamp integer NOT NULL,
replica_id integer NOT NULL
);
CREATE TABLE public.project_collaborators (
id integer NOT NULL,
project_id integer NOT NULL,
connection_id integer NOT NULL,
user_id integer NOT NULL,
replica_id integer NOT NULL,
is_host boolean NOT NULL,
connection_server_id integer NOT NULL,
committer_name character varying,
committer_email character varying
);
CREATE SEQUENCE public.project_collaborators_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.project_collaborators_id_seq OWNED BY public.project_collaborators.id;
CREATE TABLE public.project_repositories (
project_id integer NOT NULL,
abs_path character varying,
id bigint NOT NULL,
legacy_worktree_id bigint,
entry_ids character varying,
branch character varying,
scan_id bigint NOT NULL,
is_deleted boolean NOT NULL,
current_merge_conflicts character varying,
branch_summary character varying,
head_commit_details character varying,
merge_message character varying
);
CREATE TABLE public.project_repository_statuses (
project_id integer NOT NULL,
repository_id bigint NOT NULL,
repo_path character varying NOT NULL,
status bigint NOT NULL,
status_kind integer NOT NULL,
first_status integer,
second_status integer,
scan_id bigint NOT NULL,
is_deleted boolean NOT NULL
);
CREATE TABLE public.projects (
id integer NOT NULL,
host_user_id integer,
unregistered boolean DEFAULT false NOT NULL,
room_id integer,
host_connection_id integer,
host_connection_server_id integer,
windows_paths boolean DEFAULT false
);
CREATE SEQUENCE public.projects_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.projects_id_seq OWNED BY public.projects.id;
CREATE TABLE public.room_participants (
id integer NOT NULL,
room_id integer NOT NULL,
user_id integer NOT NULL,
answering_connection_id integer,
location_kind integer,
location_project_id integer,
initial_project_id integer,
calling_user_id integer NOT NULL,
calling_connection_id integer NOT NULL,
answering_connection_lost boolean DEFAULT false NOT NULL,
answering_connection_server_id integer,
calling_connection_server_id integer,
participant_index integer,
role text
);
CREATE SEQUENCE public.room_participants_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.room_participants_id_seq OWNED BY public.room_participants.id;
CREATE TABLE public.rooms (
id integer NOT NULL,
live_kit_room character varying NOT NULL,
channel_id integer
);
CREATE SEQUENCE public.rooms_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.rooms_id_seq OWNED BY public.rooms.id;
CREATE TABLE public.servers (
id integer NOT NULL,
environment character varying NOT NULL
);
CREATE SEQUENCE public.servers_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.servers_id_seq OWNED BY public.servers.id;
CREATE TABLE public.user_features (
user_id integer NOT NULL,
feature_id integer NOT NULL
);
CREATE TABLE public.users (
id integer NOT NULL,
github_login character varying,
admin boolean NOT NULL,
email_address character varying(255) DEFAULT NULL::character varying,
invite_code character varying(64),
invite_count integer DEFAULT 0 NOT NULL,
inviter_id integer,
connected_once boolean DEFAULT false NOT NULL,
created_at timestamp without time zone DEFAULT now() NOT NULL,
github_user_id integer NOT NULL,
metrics_id uuid DEFAULT gen_random_uuid() NOT NULL,
accepted_tos_at timestamp without time zone,
github_user_created_at timestamp without time zone,
custom_llm_monthly_allowance_in_cents integer,
name text
);
CREATE SEQUENCE public.users_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id;
CREATE TABLE public.worktree_diagnostic_summaries (
project_id integer NOT NULL,
worktree_id bigint NOT NULL,
path character varying NOT NULL,
language_server_id bigint NOT NULL,
error_count integer NOT NULL,
warning_count integer NOT NULL
);
CREATE TABLE public.worktree_entries (
project_id integer NOT NULL,
worktree_id bigint NOT NULL,
id bigint NOT NULL,
is_dir boolean NOT NULL,
path character varying NOT NULL,
inode bigint NOT NULL,
mtime_seconds bigint NOT NULL,
mtime_nanos integer NOT NULL,
is_symlink boolean DEFAULT false NOT NULL,
is_ignored boolean NOT NULL,
scan_id bigint,
is_deleted boolean,
git_status bigint,
is_external boolean DEFAULT false NOT NULL,
is_fifo boolean DEFAULT false NOT NULL,
canonical_path text,
is_hidden boolean DEFAULT false NOT NULL
);
CREATE TABLE public.worktree_settings_files (
project_id integer NOT NULL,
worktree_id bigint NOT NULL,
path character varying NOT NULL,
content text NOT NULL,
kind character varying
);
CREATE TABLE public.worktrees (
project_id integer NOT NULL,
id bigint NOT NULL,
root_name character varying NOT NULL,
abs_path character varying NOT NULL,
visible boolean NOT NULL,
scan_id bigint NOT NULL,
is_complete boolean DEFAULT false NOT NULL,
completed_scan_id bigint
);
ALTER TABLE ONLY public.access_tokens ALTER COLUMN id SET DEFAULT nextval('public.access_tokens_id_seq'::regclass);
ALTER TABLE ONLY public.breakpoints ALTER COLUMN id SET DEFAULT nextval('public.breakpoints_id_seq'::regclass);
ALTER TABLE ONLY public.buffers ALTER COLUMN id SET DEFAULT nextval('public.buffers_id_seq'::regclass);
ALTER TABLE ONLY public.channel_buffer_collaborators ALTER COLUMN id SET DEFAULT nextval('public.channel_buffer_collaborators_id_seq'::regclass);
ALTER TABLE ONLY public.channel_chat_participants ALTER COLUMN id SET DEFAULT nextval('public.channel_chat_participants_id_seq'::regclass);
ALTER TABLE ONLY public.channel_members ALTER COLUMN id SET DEFAULT nextval('public.channel_members_id_seq'::regclass);
ALTER TABLE ONLY public.channels ALTER COLUMN id SET DEFAULT nextval('public.channels_id_seq'::regclass);
ALTER TABLE ONLY public.contacts ALTER COLUMN id SET DEFAULT nextval('public.contacts_id_seq'::regclass);
ALTER TABLE ONLY public.extensions ALTER COLUMN id SET DEFAULT nextval('public.extensions_id_seq'::regclass);
ALTER TABLE ONLY public.feature_flags ALTER COLUMN id SET DEFAULT nextval('public.feature_flags_id_seq'::regclass);
ALTER TABLE ONLY public.followers ALTER COLUMN id SET DEFAULT nextval('public.followers_id_seq'::regclass);
ALTER TABLE ONLY public.notification_kinds ALTER COLUMN id SET DEFAULT nextval('public.notification_kinds_id_seq'::regclass);
ALTER TABLE ONLY public.notifications ALTER COLUMN id SET DEFAULT nextval('public.notifications_id_seq'::regclass);
ALTER TABLE ONLY public.project_collaborators ALTER COLUMN id SET DEFAULT nextval('public.project_collaborators_id_seq'::regclass);
ALTER TABLE ONLY public.projects ALTER COLUMN id SET DEFAULT nextval('public.projects_id_seq'::regclass);
ALTER TABLE ONLY public.room_participants ALTER COLUMN id SET DEFAULT nextval('public.room_participants_id_seq'::regclass);
ALTER TABLE ONLY public.rooms ALTER COLUMN id SET DEFAULT nextval('public.rooms_id_seq'::regclass);
ALTER TABLE ONLY public.servers ALTER COLUMN id SET DEFAULT nextval('public.servers_id_seq'::regclass);
ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass);
ALTER TABLE ONLY public.access_tokens
ADD CONSTRAINT access_tokens_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.breakpoints
ADD CONSTRAINT breakpoints_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.buffer_operations
ADD CONSTRAINT buffer_operations_pkey PRIMARY KEY (buffer_id, epoch, lamport_timestamp, replica_id);
ALTER TABLE ONLY public.buffer_snapshots
ADD CONSTRAINT buffer_snapshots_pkey PRIMARY KEY (buffer_id, epoch);
ALTER TABLE ONLY public.buffers
ADD CONSTRAINT buffers_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.channel_buffer_collaborators
ADD CONSTRAINT channel_buffer_collaborators_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.channel_chat_participants
ADD CONSTRAINT channel_chat_participants_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.channel_members
ADD CONSTRAINT channel_members_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.channels
ADD CONSTRAINT channels_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.contacts
ADD CONSTRAINT contacts_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.contributors
ADD CONSTRAINT contributors_pkey PRIMARY KEY (user_id);
ALTER TABLE ONLY public.extension_versions
ADD CONSTRAINT extension_versions_pkey PRIMARY KEY (extension_id, version);
ALTER TABLE ONLY public.extensions
ADD CONSTRAINT extensions_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.feature_flags
ADD CONSTRAINT feature_flags_flag_key UNIQUE (flag);
ALTER TABLE ONLY public.feature_flags
ADD CONSTRAINT feature_flags_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.followers
ADD CONSTRAINT followers_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.language_servers
ADD CONSTRAINT language_servers_pkey PRIMARY KEY (project_id, id);
ALTER TABLE ONLY public.notification_kinds
ADD CONSTRAINT notification_kinds_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.observed_buffer_edits
ADD CONSTRAINT observed_buffer_edits_pkey PRIMARY KEY (user_id, buffer_id);
ALTER TABLE ONLY public.project_collaborators
ADD CONSTRAINT project_collaborators_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.project_repositories
ADD CONSTRAINT project_repositories_pkey PRIMARY KEY (project_id, id);
ALTER TABLE ONLY public.project_repository_statuses
ADD CONSTRAINT project_repository_statuses_pkey PRIMARY KEY (project_id, repository_id, repo_path);
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.room_participants
ADD CONSTRAINT room_participants_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.rooms
ADD CONSTRAINT rooms_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.servers
ADD CONSTRAINT servers_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.user_features
ADD CONSTRAINT user_features_pkey PRIMARY KEY (user_id, feature_id);
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
ALTER TABLE ONLY public.worktree_diagnostic_summaries
ADD CONSTRAINT worktree_diagnostic_summaries_pkey PRIMARY KEY (project_id, worktree_id, path);
ALTER TABLE ONLY public.worktree_entries
ADD CONSTRAINT worktree_entries_pkey PRIMARY KEY (project_id, worktree_id, id);
ALTER TABLE ONLY public.worktree_settings_files
ADD CONSTRAINT worktree_settings_files_pkey PRIMARY KEY (project_id, worktree_id, path);
ALTER TABLE ONLY public.worktrees
ADD CONSTRAINT worktrees_pkey PRIMARY KEY (project_id, id);
CREATE INDEX index_access_tokens_user_id ON public.access_tokens USING btree (user_id);
CREATE INDEX index_breakpoints_on_project_id ON public.breakpoints USING btree (project_id);
CREATE INDEX index_buffers_on_channel_id ON public.buffers USING btree (channel_id);
CREATE INDEX index_channel_buffer_collaborators_on_channel_id ON public.channel_buffer_collaborators USING btree (channel_id);
CREATE UNIQUE INDEX index_channel_buffer_collaborators_on_channel_id_and_replica_id ON public.channel_buffer_collaborators USING btree (channel_id, replica_id);
CREATE UNIQUE INDEX index_channel_buffer_collaborators_on_channel_id_connection_id_ ON public.channel_buffer_collaborators USING btree (channel_id, connection_id, connection_server_id);
CREATE INDEX index_channel_buffer_collaborators_on_connection_id ON public.channel_buffer_collaborators USING btree (connection_id);
CREATE INDEX index_channel_buffer_collaborators_on_connection_server_id ON public.channel_buffer_collaborators USING btree (connection_server_id);
CREATE INDEX index_channel_chat_participants_on_channel_id ON public.channel_chat_participants USING btree (channel_id);
CREATE UNIQUE INDEX index_channel_members_on_channel_id_and_user_id ON public.channel_members USING btree (channel_id, user_id);
CREATE INDEX index_channels_on_parent_path ON public.channels USING btree (parent_path text_pattern_ops);
CREATE INDEX index_channels_on_parent_path_and_order ON public.channels USING btree (parent_path, channel_order);
CREATE INDEX index_contacts_user_id_b ON public.contacts USING btree (user_id_b);
CREATE UNIQUE INDEX index_contacts_user_ids ON public.contacts USING btree (user_id_a, user_id_b);
CREATE UNIQUE INDEX index_extensions_external_id ON public.extensions USING btree (external_id);
CREATE INDEX index_extensions_total_download_count ON public.extensions USING btree (total_download_count);
CREATE UNIQUE INDEX index_feature_flags ON public.feature_flags USING btree (id);
CREATE UNIQUE INDEX index_followers_on_project_id_and_leader_connection_server_id_a ON public.followers USING btree (project_id, leader_connection_server_id, leader_connection_id, follower_connection_server_id, follower_connection_id);
CREATE INDEX index_followers_on_room_id ON public.followers USING btree (room_id);
CREATE UNIQUE INDEX index_invite_code_users ON public.users USING btree (invite_code);
CREATE INDEX index_language_servers_on_project_id ON public.language_servers USING btree (project_id);
CREATE UNIQUE INDEX index_notification_kinds_on_name ON public.notification_kinds USING btree (name);
CREATE INDEX index_notifications_on_recipient_id_is_read_kind_entity_id ON public.notifications USING btree (recipient_id, is_read, kind, entity_id);
CREATE UNIQUE INDEX index_observed_buffer_user_and_buffer_id ON public.observed_buffer_edits USING btree (user_id, buffer_id);
CREATE INDEX index_project_collaborators_on_connection_id ON public.project_collaborators USING btree (connection_id);
CREATE INDEX index_project_collaborators_on_connection_server_id ON public.project_collaborators USING btree (connection_server_id);
CREATE INDEX index_project_collaborators_on_project_id ON public.project_collaborators USING btree (project_id);
CREATE UNIQUE INDEX index_project_collaborators_on_project_id_and_replica_id ON public.project_collaborators USING btree (project_id, replica_id);
CREATE UNIQUE INDEX index_project_collaborators_on_project_id_connection_id_and_ser ON public.project_collaborators USING btree (project_id, connection_id, connection_server_id);
CREATE INDEX index_project_repos_statuses_on_project_id ON public.project_repository_statuses USING btree (project_id);
CREATE INDEX index_project_repos_statuses_on_project_id_and_repo_id ON public.project_repository_statuses USING btree (project_id, repository_id);
CREATE INDEX index_project_repositories_on_project_id ON public.project_repositories USING btree (project_id);
CREATE INDEX index_projects_on_host_connection_id_and_host_connection_server ON public.projects USING btree (host_connection_id, host_connection_server_id);
CREATE INDEX index_projects_on_host_connection_server_id ON public.projects USING btree (host_connection_server_id);
CREATE INDEX index_room_participants_on_answering_connection_id ON public.room_participants USING btree (answering_connection_id);
CREATE UNIQUE INDEX index_room_participants_on_answering_connection_id_and_answerin ON public.room_participants USING btree (answering_connection_id, answering_connection_server_id);
CREATE INDEX index_room_participants_on_answering_connection_server_id ON public.room_participants USING btree (answering_connection_server_id);
CREATE INDEX index_room_participants_on_calling_connection_server_id ON public.room_participants USING btree (calling_connection_server_id);
CREATE INDEX index_room_participants_on_room_id ON public.room_participants USING btree (room_id);
CREATE UNIQUE INDEX index_room_participants_on_user_id ON public.room_participants USING btree (user_id);
CREATE UNIQUE INDEX index_rooms_on_channel_id ON public.rooms USING btree (channel_id);
CREATE INDEX index_settings_files_on_project_id ON public.worktree_settings_files USING btree (project_id);
CREATE INDEX index_settings_files_on_project_id_and_wt_id ON public.worktree_settings_files USING btree (project_id, worktree_id);
CREATE INDEX index_user_features_on_feature_id ON public.user_features USING btree (feature_id);
CREATE INDEX index_user_features_on_user_id ON public.user_features USING btree (user_id);
CREATE UNIQUE INDEX index_user_features_user_id_and_feature_id ON public.user_features USING btree (user_id, feature_id);
CREATE UNIQUE INDEX index_users_github_login ON public.users USING btree (github_login);
CREATE INDEX index_users_on_email_address ON public.users USING btree (email_address);
CREATE INDEX index_worktree_diagnostic_summaries_on_project_id ON public.worktree_diagnostic_summaries USING btree (project_id);
CREATE INDEX index_worktree_diagnostic_summaries_on_project_id_and_worktree_ ON public.worktree_diagnostic_summaries USING btree (project_id, worktree_id);
CREATE INDEX index_worktree_entries_on_project_id ON public.worktree_entries USING btree (project_id);
CREATE INDEX index_worktree_entries_on_project_id_and_worktree_id ON public.worktree_entries USING btree (project_id, worktree_id);
CREATE INDEX index_worktrees_on_project_id ON public.worktrees USING btree (project_id);
CREATE INDEX trigram_index_extensions_name ON public.extensions USING gin (name public.gin_trgm_ops);
CREATE INDEX trigram_index_users_on_github_login ON public.users USING gin (github_login public.gin_trgm_ops);
CREATE UNIQUE INDEX uix_channels_parent_path_name ON public.channels USING btree (parent_path, name) WHERE ((parent_path IS NOT NULL) AND (parent_path <> ''::text));
CREATE UNIQUE INDEX uix_users_on_github_user_id ON public.users USING btree (github_user_id);
ALTER TABLE ONLY public.access_tokens
ADD CONSTRAINT access_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.breakpoints
ADD CONSTRAINT breakpoints_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.buffer_operations
ADD CONSTRAINT buffer_operations_buffer_id_fkey FOREIGN KEY (buffer_id) REFERENCES public.buffers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.buffer_snapshots
ADD CONSTRAINT buffer_snapshots_buffer_id_fkey FOREIGN KEY (buffer_id) REFERENCES public.buffers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.buffers
ADD CONSTRAINT buffers_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_buffer_collaborators
ADD CONSTRAINT channel_buffer_collaborators_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_buffer_collaborators
ADD CONSTRAINT channel_buffer_collaborators_connection_server_id_fkey FOREIGN KEY (connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_buffer_collaborators
ADD CONSTRAINT channel_buffer_collaborators_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_chat_participants
ADD CONSTRAINT channel_chat_participants_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_chat_participants
ADD CONSTRAINT channel_chat_participants_connection_server_id_fkey FOREIGN KEY (connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_chat_participants
ADD CONSTRAINT channel_chat_participants_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
ALTER TABLE ONLY public.channel_members
ADD CONSTRAINT channel_members_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.channel_members
ADD CONSTRAINT channel_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.contacts
ADD CONSTRAINT contacts_user_id_a_fkey FOREIGN KEY (user_id_a) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.contacts
ADD CONSTRAINT contacts_user_id_b_fkey FOREIGN KEY (user_id_b) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.contributors
ADD CONSTRAINT contributors_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
ALTER TABLE ONLY public.extension_versions
ADD CONSTRAINT extension_versions_extension_id_fkey FOREIGN KEY (extension_id) REFERENCES public.extensions(id);
ALTER TABLE ONLY public.project_repositories
ADD CONSTRAINT fk_project_repositories_project_id FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.project_repository_statuses
ADD CONSTRAINT fk_project_repository_statuses_project_id FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.followers
ADD CONSTRAINT followers_follower_connection_server_id_fkey FOREIGN KEY (follower_connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.followers
ADD CONSTRAINT followers_leader_connection_server_id_fkey FOREIGN KEY (leader_connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.followers
ADD CONSTRAINT followers_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.followers
ADD CONSTRAINT followers_room_id_fkey FOREIGN KEY (room_id) REFERENCES public.rooms(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.language_servers
ADD CONSTRAINT language_servers_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_kind_fkey FOREIGN KEY (kind) REFERENCES public.notification_kinds(id);
ALTER TABLE ONLY public.notifications
ADD CONSTRAINT notifications_recipient_id_fkey FOREIGN KEY (recipient_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.observed_buffer_edits
ADD CONSTRAINT observed_buffer_edits_buffer_id_fkey FOREIGN KEY (buffer_id) REFERENCES public.buffers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.observed_buffer_edits
ADD CONSTRAINT observed_buffer_edits_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.project_collaborators
ADD CONSTRAINT project_collaborators_connection_server_id_fkey FOREIGN KEY (connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.project_collaborators
ADD CONSTRAINT project_collaborators_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_host_connection_server_id_fkey FOREIGN KEY (host_connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_host_user_id_fkey FOREIGN KEY (host_user_id) REFERENCES public.users(id);
ALTER TABLE ONLY public.projects
ADD CONSTRAINT projects_room_id_fkey FOREIGN KEY (room_id) REFERENCES public.rooms(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.room_participants
ADD CONSTRAINT room_participants_answering_connection_server_id_fkey FOREIGN KEY (answering_connection_server_id) REFERENCES public.servers(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.room_participants
ADD CONSTRAINT room_participants_calling_connection_server_id_fkey FOREIGN KEY (calling_connection_server_id) REFERENCES public.servers(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.room_participants
ADD CONSTRAINT room_participants_calling_user_id_fkey FOREIGN KEY (calling_user_id) REFERENCES public.users(id);
ALTER TABLE ONLY public.room_participants
ADD CONSTRAINT room_participants_room_id_fkey FOREIGN KEY (room_id) REFERENCES public.rooms(id);
ALTER TABLE ONLY public.room_participants
ADD CONSTRAINT room_participants_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
ALTER TABLE ONLY public.rooms
ADD CONSTRAINT rooms_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.user_features
ADD CONSTRAINT user_features_feature_id_fkey FOREIGN KEY (feature_id) REFERENCES public.feature_flags(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.user_features
ADD CONSTRAINT user_features_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
ALTER TABLE ONLY public.users
ADD CONSTRAINT users_inviter_id_fkey FOREIGN KEY (inviter_id) REFERENCES public.users(id) ON DELETE SET NULL;
ALTER TABLE ONLY public.worktree_diagnostic_summaries
ADD CONSTRAINT worktree_diagnostic_summaries_project_id_worktree_id_fkey FOREIGN KEY (project_id, worktree_id) REFERENCES public.worktrees(project_id, id) ON DELETE CASCADE;
ALTER TABLE ONLY public.worktree_entries
ADD CONSTRAINT worktree_entries_project_id_worktree_id_fkey FOREIGN KEY (project_id, worktree_id) REFERENCES public.worktrees(project_id, id) ON DELETE CASCADE;
ALTER TABLE ONLY public.worktree_settings_files
ADD CONSTRAINT worktree_settings_files_project_id_worktree_id_fkey FOREIGN KEY (project_id, worktree_id) REFERENCES public.worktrees(project_id, id) ON DELETE CASCADE;
ALTER TABLE ONLY public.worktrees
ADD CONSTRAINT worktrees_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id) ON DELETE CASCADE;