-- Downloaded from: https://github.com/CravingCrates/AnkiCollab-Backend/blob/ff713df0867723b05a2e0830112b800515b5eb65/schema-database.sql -- -- PostgreSQL database dump -- -- Dumped from database version 17.4 (Ubuntu 17.4-1.pgdg24.04+2) -- Dumped by pg_dump version 17.4 (Ubuntu 17.4-1.pgdg24.04+2) SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET transaction_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: anki; Type: SCHEMA; Schema: -; Owner: postgres -- CREATE SCHEMA anki; ALTER SCHEMA anki OWNER TO postgres; -- -- Name: public; Type: SCHEMA; Schema: -; Owner: postgres -- -- *not* creating schema, since initdb creates it ALTER SCHEMA public OWNER TO postgres; -- -- Name: delete_deck(text); Type: FUNCTION; Schema: anki; Owner: postgres -- CREATE FUNCTION anki.delete_deck(input_hash text) RETURNS void LANGUAGE plpgsql AS $$ BEGIN WITH RECURSIVE subdecks AS ( SELECT id, human_hash FROM decks WHERE human_hash = input_hash UNION ALL SELECT d.id, d.human_hash FROM decks d JOIN subdecks s ON s.id = d.parent ) DELETE from decks cascade where id in (select id from subdecks); END; $$; ALTER FUNCTION anki.delete_deck(input_hash text) OWNER TO postgres; -- -- Name: delete_deck_tree(bigint); Type: FUNCTION; Schema: anki; Owner: postgres -- CREATE FUNCTION anki.delete_deck_tree(p_id bigint) RETURNS void LANGUAGE plpgsql AS $$ DECLARE r record; BEGIN DELETE FROM decks WHERE parent = p_id; FOR r IN SELECT id FROM decks WHERE parent = p_id LOOP PERFORM delete_deck_tree(r.id); END LOOP; DELETE FROM decks WHERE id = p_id; END; $$; ALTER FUNCTION anki.delete_deck_tree(p_id bigint) OWNER TO postgres; -- -- Name: delete_deck_tree_by_hash(text); Type: FUNCTION; Schema: anki; Owner: postgres -- CREATE FUNCTION anki.delete_deck_tree_by_hash(p_hash text) RETURNS void LANGUAGE plpgsql AS $$ DECLARE r record; BEGIN DELETE FROM decks WHERE human_hash = p_hash; FOR r IN (SELECT id FROM decks WHERE parent = (SELECT id FROM decks WHERE human_hash = p_hash)) LOOP PERFORM delete_deck_tree(r.id); END LOOP; END; $$; ALTER FUNCTION anki.delete_deck_tree_by_hash(p_hash text) OWNER TO postgres; -- -- Name: normalize_username(); Type: FUNCTION; Schema: anki; Owner: postgres -- CREATE FUNCTION anki.normalize_username() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN NEW.username = TRIM(LOWER(NEW.username)); RETURN NEW; END; $$; ALTER FUNCTION anki.normalize_username() OWNER TO postgres; -- -- Name: truncate_tables(); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.truncate_tables() RETURNS void LANGUAGE plpgsql AS $$ DECLARE statements CURSOR FOR SELECT tablename FROM pg_tables WHERE tableowner = 'postgres' AND schemaname = 'anki' AND tablename != 'users'; BEGIN FOR stmt IN statements LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;'; END LOOP; END; $$; ALTER FUNCTION public.truncate_tables() OWNER TO postgres; -- -- Name: truncate_tables(character varying); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.truncate_tables(username character varying) RETURNS void LANGUAGE plpgsql AS $$ DECLARE statements CURSOR FOR SELECT tablename FROM pg_tables WHERE tableowner = username AND schemaname = 'public'; BEGIN FOR stmt IN statements LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;'; END LOOP; END; $$; ALTER FUNCTION public.truncate_tables(username character varying) OWNER TO postgres; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: auth_tokens; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.auth_tokens ( id integer NOT NULL, user_id integer NOT NULL, token_hash bytea NOT NULL, refresh_token_hash bytea, expires_at timestamp with time zone NOT NULL, refresh_expires_at timestamp with time zone, created_at timestamp with time zone DEFAULT now() NOT NULL, last_used_at timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE anki.auth_tokens OWNER TO postgres; -- -- Name: auth_tokens_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- ALTER TABLE anki.auth_tokens ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( SEQUENCE NAME anki.auth_tokens_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 ); -- -- Name: calculated_stats; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.calculated_stats ( note_id bigint NOT NULL, sample_size integer, retention real, lapses real, reps real ); ALTER TABLE anki.calculated_stats OWNER TO postgres; -- -- Name: card_deletion_suggestions; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.card_deletion_suggestions ( id integer NOT NULL, note bigint, creator_ip character varying(255) NOT NULL, commit integer ); ALTER TABLE anki.card_deletion_suggestions OWNER TO postgres; -- -- Name: card_deletion_suggestions_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.card_deletion_suggestions_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.card_deletion_suggestions_id_seq OWNER TO postgres; -- -- Name: card_deletion_suggestions_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.card_deletion_suggestions_id_seq OWNED BY anki.card_deletion_suggestions.id; -- -- Name: changelogs; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.changelogs ( id bigint NOT NULL, deck bigint, message text, "timestamp" timestamp with time zone ); ALTER TABLE anki.changelogs OWNER TO postgres; -- -- Name: changelogs_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.changelogs_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.changelogs_id_seq OWNER TO postgres; -- -- Name: changelogs_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.changelogs_id_seq OWNED BY anki.changelogs.id; -- -- Name: commits; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.commits ( commit_id integer NOT NULL, rationale integer, ip character varying(255), "timestamp" timestamp with time zone, deck bigint, info character varying(255) DEFAULT ''::character varying, user_id integer ); ALTER TABLE anki.commits OWNER TO postgres; -- -- Name: commits_commit_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.commits_commit_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.commits_commit_id_seq OWNER TO postgres; -- -- Name: commits_commit_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.commits_commit_id_seq OWNED BY anki.commits.commit_id; -- -- Name: decks; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.decks ( id bigint NOT NULL, name text DEFAULT NULL::character varying, description text DEFAULT NULL::character varying, owner integer, last_update timestamp with time zone, parent bigint, crowdanki_uuid text, human_hash character varying(255) DEFAULT NULL::character varying, creator_ip character varying(255), full_path text, private boolean DEFAULT true, stats_enabled boolean DEFAULT false, retention real, notes_with_stats_count integer DEFAULT 0, restrict_notetypes boolean DEFAULT true, restrict_subdecks boolean DEFAULT false ); ALTER TABLE anki.decks OWNER TO postgres; -- -- Name: notes; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.notes ( id bigint NOT NULL, guid character varying(255) NOT NULL, notetype bigint NOT NULL, deck bigint NOT NULL, last_update timestamp with time zone, reviewed boolean DEFAULT false NOT NULL, creator_ip character varying(255), deleted boolean DEFAULT false ); ALTER TABLE anki.notes OWNER TO postgres; -- -- Name: deck_stats; Type: MATERIALIZED VIEW; Schema: anki; Owner: postgres -- CREATE MATERIALIZED VIEW anki.deck_stats AS WITH RECURSIVE deck_tree AS ( SELECT decks.id, decks.parent, decks.id AS root_id FROM anki.decks WHERE (decks.parent IS NULL) UNION ALL SELECT d_1.id, d_1.parent, dt_1.root_id FROM (anki.decks d_1 JOIN deck_tree dt_1 ON ((d_1.parent = dt_1.id))) ) SELECT d.id, d.name, d.description, d.human_hash, d.owner, d.last_update, d.private, d.stats_enabled, CASE WHEN (count(n.*) = 0) THEN '0'::text WHEN (count(n.*) < 100) THEN '<100'::text WHEN (count(n.*) < 1000) THEN '<1k'::text ELSE ((count(n.*) / 1000) || 'k'::text) END AS note_count FROM ((anki.decks d LEFT JOIN deck_tree dt ON ((dt.root_id = d.id))) LEFT JOIN anki.notes n ON (((n.deck = dt.id) AND (n.deleted = false)))) WHERE (d.parent IS NULL) GROUP BY d.id, d.name, d.description, d.human_hash, d.owner, d.last_update, d.private, d.stats_enabled WITH NO DATA; ALTER MATERIALIZED VIEW anki.deck_stats OWNER TO postgres; -- -- Name: decks_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.decks_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.decks_id_seq OWNER TO postgres; -- -- Name: decks_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.decks_id_seq OWNED BY anki.decks.id; -- -- Name: fields; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.fields ( id bigint NOT NULL, note bigint NOT NULL, "position" oid NOT NULL, content text, reviewed boolean DEFAULT false NOT NULL, creator_ip character varying(255), commit integer ); ALTER TABLE anki.fields OWNER TO postgres; -- -- Name: fields_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.fields_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.fields_id_seq OWNER TO postgres; -- -- Name: fields_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.fields_id_seq OWNED BY anki.fields.id; -- -- Name: maintainers; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.maintainers ( id integer NOT NULL, deck bigint, user_id integer ); ALTER TABLE anki.maintainers OWNER TO postgres; -- -- Name: maintainers_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.maintainers_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.maintainers_id_seq OWNER TO postgres; -- -- Name: maintainers_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.maintainers_id_seq OWNED BY anki.maintainers.id; -- -- Name: media; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.media ( id integer NOT NULL, filename text NOT NULL, deck bigint NOT NULL ); ALTER TABLE anki.media OWNER TO postgres; -- -- Name: media_bulk_uploads; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.media_bulk_uploads ( id uuid DEFAULT gen_random_uuid() NOT NULL, metadata jsonb NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE anki.media_bulk_uploads OWNER TO postgres; -- -- Name: media_files; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.media_files ( id bigint NOT NULL, hash character varying(64) NOT NULL, file_size bigint DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL ); ALTER TABLE anki.media_files OWNER TO postgres; -- -- Name: media_files_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- ALTER TABLE anki.media_files ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( SEQUENCE NAME anki.media_files_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 ); -- -- Name: media_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.media_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.media_id_seq OWNER TO postgres; -- -- Name: media_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.media_id_seq OWNED BY anki.media.id; -- -- Name: media_operations_log; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.media_operations_log ( id bigint NOT NULL, operation_type integer NOT NULL, user_id integer, ip_address character varying(45) NOT NULL, "timestamp" timestamp with time zone NOT NULL, file_hash character varying(64), file_name character varying(255), file_size bigint ); ALTER TABLE anki.media_operations_log OWNER TO postgres; -- -- Name: media_operations_log_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- ALTER TABLE anki.media_operations_log ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( SEQUENCE NAME anki.media_operations_log_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 ); -- -- Name: media_references; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.media_references ( id bigint NOT NULL, media_id bigint NOT NULL, note_id bigint, file_name character varying(255) NOT NULL ); ALTER TABLE anki.media_references OWNER TO postgres; -- -- Name: media_references_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- ALTER TABLE anki.media_references ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( SEQUENCE NAME anki.media_references_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 ); -- -- Name: mediafolders; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.mediafolders ( id integer NOT NULL, url character varying(255) NOT NULL, deck bigint NOT NULL ); ALTER TABLE anki.mediafolders OWNER TO postgres; -- -- Name: mediafolders_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.mediafolders_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.mediafolders_id_seq OWNER TO postgres; -- -- Name: mediafolders_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.mediafolders_id_seq OWNED BY anki.mediafolders.id; -- -- Name: note_move_suggestions; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.note_move_suggestions ( id integer NOT NULL, original_deck bigint, target_deck bigint, note bigint, creator_ip character varying(255) NOT NULL, commit integer ); ALTER TABLE anki.note_move_suggestions OWNER TO postgres; -- -- Name: note_move_suggestions_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.note_move_suggestions_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.note_move_suggestions_id_seq OWNER TO postgres; -- -- Name: note_move_suggestions_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.note_move_suggestions_id_seq OWNED BY anki.note_move_suggestions.id; -- -- Name: note_stats; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.note_stats ( id integer NOT NULL, note_id bigint, user_hash character varying(64), retention integer, lapses integer, reps integer ); ALTER TABLE anki.note_stats OWNER TO postgres; -- -- Name: note_stats_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.note_stats_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.note_stats_id_seq OWNER TO postgres; -- -- Name: note_stats_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.note_stats_id_seq OWNED BY anki.note_stats.id; -- -- Name: notes_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.notes_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.notes_id_seq OWNER TO postgres; -- -- Name: notes_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.notes_id_seq OWNED BY anki.notes.id; -- -- Name: notetype; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.notetype ( id bigint NOT NULL, guid text NOT NULL, css text, latex_post text, latex_pre text, latex_svg boolean, name text, type integer DEFAULT 0, owner integer, original_stock_kind integer DEFAULT 0 NOT NULL, sortf integer DEFAULT 0, req text ); ALTER TABLE anki.notetype OWNER TO postgres; -- -- Name: notetype_field; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.notetype_field ( id bigint NOT NULL, notetype bigint NOT NULL, description text, font text, name text, ord integer, rtl boolean, size integer, sticky boolean, "position" oid NOT NULL, protected boolean DEFAULT false, anki_id bigint DEFAULT 0 NOT NULL, tag integer DEFAULT 0 NOT NULL ); ALTER TABLE anki.notetype_field OWNER TO postgres; -- -- Name: notetype_field_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.notetype_field_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.notetype_field_id_seq OWNER TO postgres; -- -- Name: notetype_field_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.notetype_field_id_seq OWNED BY anki.notetype_field.id; -- -- Name: notetype_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.notetype_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.notetype_id_seq OWNER TO postgres; -- -- Name: notetype_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.notetype_id_seq OWNED BY anki.notetype.id; -- -- Name: notetype_template; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.notetype_template ( id bigint NOT NULL, notetype bigint NOT NULL, qfmt text, afmt text, bqfmt text, bafmt text, bfont text, bsize integer, name text, "position" oid NOT NULL, anki_id bigint DEFAULT 0 NOT NULL, ord integer DEFAULT 0 ); ALTER TABLE anki.notetype_template OWNER TO postgres; -- -- Name: notetype_template_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.notetype_template_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.notetype_template_id_seq OWNER TO postgres; -- -- Name: notetype_template_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.notetype_template_id_seq OWNED BY anki.notetype_template.id; -- -- Name: optional_tags; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.optional_tags ( id integer NOT NULL, deck bigint, tag_group character varying(255) ); ALTER TABLE anki.optional_tags OWNER TO postgres; -- -- Name: optional_tags_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.optional_tags_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.optional_tags_id_seq OWNER TO postgres; -- -- Name: optional_tags_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.optional_tags_id_seq OWNED BY anki.optional_tags.id; -- -- Name: service_accounts; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.service_accounts ( id integer NOT NULL, google_data jsonb NOT NULL, folder_id character varying(33) NOT NULL, deck bigint NOT NULL ); ALTER TABLE anki.service_accounts OWNER TO postgres; -- -- Name: service_accounts_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.service_accounts_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.service_accounts_id_seq OWNER TO postgres; -- -- Name: service_accounts_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.service_accounts_id_seq OWNED BY anki.service_accounts.id; -- -- Name: subscriptions; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.subscriptions ( id integer NOT NULL, user_hash character varying(255) NOT NULL, deck_id bigint NOT NULL ); ALTER TABLE anki.subscriptions OWNER TO postgres; -- -- Name: subscriptions_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.subscriptions_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.subscriptions_id_seq OWNER TO postgres; -- -- Name: subscriptions_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.subscriptions_id_seq OWNED BY anki.subscriptions.id; -- -- Name: tags; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.tags ( id bigint NOT NULL, note bigint NOT NULL, content text, reviewed boolean DEFAULT false NOT NULL, creator_ip character varying(255), action boolean DEFAULT true, commit integer ); ALTER TABLE anki.tags OWNER TO postgres; -- -- Name: tags_id_seq; Type: SEQUENCE; Schema: anki; Owner: postgres -- CREATE SEQUENCE anki.tags_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE anki.tags_id_seq OWNER TO postgres; -- -- Name: tags_id_seq; Type: SEQUENCE OWNED BY; Schema: anki; Owner: postgres -- ALTER SEQUENCE anki.tags_id_seq OWNED BY anki.tags.id; -- -- Name: user_quotas; Type: TABLE; Schema: anki; Owner: postgres -- CREATE TABLE anki.user_quotas ( user_id integer NOT NULL, storage_used bigint DEFAULT 0 NOT NULL, upload_count integer DEFAULT 0 NOT NULL, download_count integer DEFAULT 0 NOT NULL, last_reset timestamp with time zone NOT NULL ); ALTER TABLE anki.user_quotas OWNER TO postgres; -- -- Name: users; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.users ( id integer NOT NULL, username character varying(254) NOT NULL, password character varying(255) NOT NULL, is_admin boolean DEFAULT false ); ALTER TABLE public.users OWNER TO postgres; -- -- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- 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 OWNER TO postgres; -- -- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres -- ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id; -- -- Name: card_deletion_suggestions id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.card_deletion_suggestions ALTER COLUMN id SET DEFAULT nextval('anki.card_deletion_suggestions_id_seq'::regclass); -- -- Name: changelogs id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.changelogs ALTER COLUMN id SET DEFAULT nextval('anki.changelogs_id_seq'::regclass); -- -- Name: commits commit_id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.commits ALTER COLUMN commit_id SET DEFAULT nextval('anki.commits_commit_id_seq'::regclass); -- -- Name: decks id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.decks ALTER COLUMN id SET DEFAULT nextval('anki.decks_id_seq'::regclass); -- -- Name: fields id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.fields ALTER COLUMN id SET DEFAULT nextval('anki.fields_id_seq'::regclass); -- -- Name: maintainers id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.maintainers ALTER COLUMN id SET DEFAULT nextval('anki.maintainers_id_seq'::regclass); -- -- Name: media id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media ALTER COLUMN id SET DEFAULT nextval('anki.media_id_seq'::regclass); -- -- Name: mediafolders id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.mediafolders ALTER COLUMN id SET DEFAULT nextval('anki.mediafolders_id_seq'::regclass); -- -- Name: note_move_suggestions id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_move_suggestions ALTER COLUMN id SET DEFAULT nextval('anki.note_move_suggestions_id_seq'::regclass); -- -- Name: note_stats id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_stats ALTER COLUMN id SET DEFAULT nextval('anki.note_stats_id_seq'::regclass); -- -- Name: notes id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notes ALTER COLUMN id SET DEFAULT nextval('anki.notes_id_seq'::regclass); -- -- Name: notetype id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype ALTER COLUMN id SET DEFAULT nextval('anki.notetype_id_seq'::regclass); -- -- Name: notetype_field id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype_field ALTER COLUMN id SET DEFAULT nextval('anki.notetype_field_id_seq'::regclass); -- -- Name: notetype_template id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype_template ALTER COLUMN id SET DEFAULT nextval('anki.notetype_template_id_seq'::regclass); -- -- Name: optional_tags id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.optional_tags ALTER COLUMN id SET DEFAULT nextval('anki.optional_tags_id_seq'::regclass); -- -- Name: service_accounts id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.service_accounts ALTER COLUMN id SET DEFAULT nextval('anki.service_accounts_id_seq'::regclass); -- -- Name: subscriptions id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.subscriptions ALTER COLUMN id SET DEFAULT nextval('anki.subscriptions_id_seq'::regclass); -- -- Name: tags id; Type: DEFAULT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.tags ALTER COLUMN id SET DEFAULT nextval('anki.tags_id_seq'::regclass); -- -- Name: users id; Type: DEFAULT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass); -- -- Name: auth_tokens auth_tokens_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.auth_tokens ADD CONSTRAINT auth_tokens_pkey PRIMARY KEY (id); -- -- Name: calculated_stats calculated_stats_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.calculated_stats ADD CONSTRAINT calculated_stats_pkey PRIMARY KEY (note_id); -- -- Name: card_deletion_suggestions card_deletion_suggestions_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.card_deletion_suggestions ADD CONSTRAINT card_deletion_suggestions_pkey PRIMARY KEY (id); -- -- Name: changelogs changelogs_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.changelogs ADD CONSTRAINT changelogs_pkey PRIMARY KEY (id); -- -- Name: commits commits_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.commits ADD CONSTRAINT commits_pkey PRIMARY KEY (commit_id); -- -- Name: decks hash_unique; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.decks ADD CONSTRAINT hash_unique UNIQUE (human_hash); -- -- Name: notes idunique; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notes ADD CONSTRAINT idunique UNIQUE (id); -- -- Name: decks idx_16391_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.decks ADD CONSTRAINT idx_16391_primary PRIMARY KEY (id); -- -- Name: fields idx_16401_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.fields ADD CONSTRAINT idx_16401_primary PRIMARY KEY (id); -- -- Name: notes idx_16409_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notes ADD CONSTRAINT idx_16409_primary PRIMARY KEY (id); -- -- Name: notetype idx_16415_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype ADD CONSTRAINT idx_16415_primary PRIMARY KEY (id); -- -- Name: notetype_field idx_16422_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype_field ADD CONSTRAINT idx_16422_primary PRIMARY KEY (id); -- -- Name: notetype_template idx_16429_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype_template ADD CONSTRAINT idx_16429_primary PRIMARY KEY (id); -- -- Name: tags idx_16436_primary; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.tags ADD CONSTRAINT idx_16436_primary PRIMARY KEY (id); -- -- Name: maintainers maintainers_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.maintainers ADD CONSTRAINT maintainers_pkey PRIMARY KEY (id); -- -- Name: media_bulk_uploads media_bulk_uploads_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_bulk_uploads ADD CONSTRAINT media_bulk_uploads_pkey PRIMARY KEY (id); -- -- Name: media_files media_files_hash_key; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_files ADD CONSTRAINT media_files_hash_key UNIQUE (hash); -- -- Name: media_files media_files_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_files ADD CONSTRAINT media_files_pkey PRIMARY KEY (id); -- -- Name: media_operations_log media_operations_log_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_operations_log ADD CONSTRAINT media_operations_log_pkey PRIMARY KEY (id); -- -- Name: media media_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media ADD CONSTRAINT media_pkey PRIMARY KEY (id); -- -- Name: media_references media_references_media_id_note_id_key; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_references ADD CONSTRAINT media_references_media_id_note_id_key UNIQUE (media_id, note_id); -- -- Name: media_references media_references_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_references ADD CONSTRAINT media_references_pkey PRIMARY KEY (id); -- -- Name: mediafolders mediafolders_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.mediafolders ADD CONSTRAINT mediafolders_pkey PRIMARY KEY (id); -- -- Name: mediafolders mediafolders_unique_deck; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.mediafolders ADD CONSTRAINT mediafolders_unique_deck UNIQUE (deck); -- -- Name: mediafolders mediafolders_url_deck_key; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.mediafolders ADD CONSTRAINT mediafolders_url_deck_key UNIQUE (url, deck); -- -- Name: note_move_suggestions note_move_suggestions_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_move_suggestions ADD CONSTRAINT note_move_suggestions_pkey PRIMARY KEY (id); -- -- Name: note_stats note_stats_note_id_user_hash_key; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_stats ADD CONSTRAINT note_stats_note_id_user_hash_key UNIQUE (note_id, user_hash); -- -- Name: note_stats note_stats_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_stats ADD CONSTRAINT note_stats_pkey PRIMARY KEY (id); -- -- Name: card_deletion_suggestions note_unique; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.card_deletion_suggestions ADD CONSTRAINT note_unique UNIQUE (note); -- -- Name: optional_tags optional_tags_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.optional_tags ADD CONSTRAINT optional_tags_pkey PRIMARY KEY (id); -- -- Name: service_accounts service_accounts_deck_key; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.service_accounts ADD CONSTRAINT service_accounts_deck_key UNIQUE (deck); -- -- Name: service_accounts service_accounts_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.service_accounts ADD CONSTRAINT service_accounts_pkey PRIMARY KEY (id); -- -- Name: subscriptions subscriptions_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.subscriptions ADD CONSTRAINT subscriptions_pkey PRIMARY KEY (id); -- -- Name: subscriptions unique_ip_deck; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.subscriptions ADD CONSTRAINT unique_ip_deck UNIQUE (user_hash, deck_id); -- -- Name: user_quotas user_quotas_pkey; Type: CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.user_quotas ADD CONSTRAINT user_quotas_pkey PRIMARY KEY (user_id); -- -- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.users ADD CONSTRAINT users_email_key UNIQUE (username); -- -- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.users ADD CONSTRAINT users_pkey PRIMARY KEY (id); -- -- Name: idx_16391_crowdanki_uuid; Type: INDEX; Schema: anki; Owner: postgres -- CREATE UNIQUE INDEX idx_16391_crowdanki_uuid ON anki.decks USING btree (crowdanki_uuid); -- -- Name: idx_16391_owner; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_16391_owner ON anki.decks USING btree (owner); -- -- Name: idx_16401_note; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_16401_note ON anki.fields USING btree (note); -- -- Name: idx_16409_deck; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_16409_deck ON anki.notes USING btree (deck); -- -- Name: idx_16422_notetype; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_16422_notetype ON anki.notetype_field USING btree (notetype); -- -- Name: idx_16429_notetype; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_16429_notetype ON anki.notetype_template USING btree (notetype); -- -- Name: idx_16436_note; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_16436_note ON anki.tags USING btree (note); -- -- Name: idx_auth_tokens_expires_at; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_auth_tokens_expires_at ON anki.auth_tokens USING btree (expires_at); -- -- Name: idx_auth_tokens_refresh_token_hash; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_auth_tokens_refresh_token_hash ON anki.auth_tokens USING btree (refresh_token_hash); -- -- Name: idx_auth_tokens_token_hash; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_auth_tokens_token_hash ON anki.auth_tokens USING btree (token_hash); -- -- Name: idx_auth_tokens_user_id; Type: INDEX; Schema: anki; Owner: postgres -- CREATE UNIQUE INDEX idx_auth_tokens_user_id ON anki.auth_tokens USING btree (user_id); -- -- Name: idx_deck_lastupdate; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_deck_lastupdate ON anki.decks USING btree (last_update); -- -- Name: idx_fields_note_position_reviewed; Type: INDEX; Schema: anki; Owner: postgres -- CREATE UNIQUE INDEX idx_fields_note_position_reviewed ON anki.fields USING btree (note, "position") WHERE (reviewed = true); -- -- Name: idx_fields_reviewed_position; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_fields_reviewed_position ON anki.fields USING btree (reviewed, "position"); -- -- Name: idx_guid_owner; Type: INDEX; Schema: anki; Owner: postgres -- CREATE UNIQUE INDEX idx_guid_owner ON anki.notetype USING btree (guid, owner); -- -- Name: idx_notes_notetype; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_notes_notetype ON anki.notes USING btree (notetype); -- -- Name: idx_notetype_field_protected; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_notetype_field_protected ON anki.notetype_field USING btree (protected); -- -- Name: idx_notetype_field_protected_notetype; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_notetype_field_protected_notetype ON anki.notetype_field USING btree (protected, notetype); -- -- Name: idx_tags_search; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX idx_tags_search ON anki.tags USING btree (note, reviewed, content); -- -- Name: media_deck_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX media_deck_idx ON anki.media USING btree (deck); -- -- Name: media_filename_deck_key; Type: INDEX; Schema: anki; Owner: postgres -- CREATE UNIQUE INDEX media_filename_deck_key ON anki.media USING btree (md5(filename), deck); -- -- Name: media_files_hash_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX media_files_hash_idx ON anki.media_files USING btree (hash); -- -- Name: media_references_file_name_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX media_references_file_name_idx ON anki.media_references USING btree (file_name); -- -- Name: media_references_media_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX media_references_media_idx ON anki.media_references USING btree (media_id); -- -- Name: media_references_note_id_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX media_references_note_id_idx ON anki.media_references USING btree (note_id); -- -- Name: notes_guid_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX notes_guid_idx ON anki.notes USING btree (guid); -- -- Name: subscriptions_deck_id_idx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX subscriptions_deck_id_idx ON anki.subscriptions USING btree (deck_id); -- -- Name: ~card_deletion_suggestions-baa66cc5; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~card_deletion_suggestions-baa66cc5" ON anki.card_deletion_suggestions USING btree (commit); -- -- Name: ~decks-f001e354; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~decks-f001e354" ON anki.decks USING btree (parent); -- -- Name: ~fields-25ac0f75; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~fields-25ac0f75" ON anki.fields USING btree (commit) WHERE (NOT reviewed); -- -- Name: ~fields-921e8dd2; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~fields-921e8dd2" ON anki.fields USING btree (note) WHERE (NOT reviewed); -- -- Name: ~fields-baa66cc5; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~fields-baa66cc5" ON anki.fields USING btree (commit); -- -- Name: ~maintainers-6d3da866; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~maintainers-6d3da866" ON anki.maintainers USING btree (user_id); -- -- Name: ~note_move_suggestions-xx; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~note_move_suggestions-xx" ON anki.note_move_suggestions USING btree (commit); -- -- Name: ~notes-323fd8e9; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~notes-323fd8e9" ON anki.notes USING btree (deck, last_update) WHERE reviewed; -- -- Name: ~notetype-6de94a39; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~notetype-6de94a39" ON anki.notetype USING btree (owner); -- -- Name: ~tags-25ac0f75; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~tags-25ac0f75" ON anki.tags USING btree (commit) WHERE (NOT reviewed); -- -- Name: ~tags-921e8dd2; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~tags-921e8dd2" ON anki.tags USING btree (note) WHERE (NOT reviewed); -- -- Name: ~tags-baa66cc5; Type: INDEX; Schema: anki; Owner: postgres -- CREATE INDEX "~tags-baa66cc5" ON anki.tags USING btree (commit); -- -- Name: users normalize_username_trigger; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER normalize_username_trigger BEFORE INSERT OR UPDATE ON public.users FOR EACH ROW EXECUTE FUNCTION anki.normalize_username(); -- -- Name: auth_tokens auth_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.auth_tokens ADD CONSTRAINT auth_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; -- -- Name: calculated_stats calculated_stats_note_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.calculated_stats ADD CONSTRAINT calculated_stats_note_id_fkey FOREIGN KEY (note_id) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: card_deletion_suggestions card_deletion_suggestions_commit_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.card_deletion_suggestions ADD CONSTRAINT card_deletion_suggestions_commit_fkey FOREIGN KEY (commit) REFERENCES anki.commits(commit_id) ON DELETE CASCADE; -- -- Name: card_deletion_suggestions card_deletion_suggestions_note_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.card_deletion_suggestions ADD CONSTRAINT card_deletion_suggestions_note_fkey FOREIGN KEY (note) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: changelogs changelogs_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.changelogs ADD CONSTRAINT changelogs_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: commits commits_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.commits ADD CONSTRAINT commits_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: commits commits_user_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.commits ADD CONSTRAINT commits_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; -- -- Name: decks deck_owner_constraint; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.decks ADD CONSTRAINT deck_owner_constraint FOREIGN KEY (owner) REFERENCES public.users(id) ON DELETE CASCADE; -- -- Name: decks decks_parent_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.decks ADD CONSTRAINT decks_parent_fkey FOREIGN KEY (parent) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: fields fields_commit_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.fields ADD CONSTRAINT fields_commit_fkey FOREIGN KEY (commit) REFERENCES anki.commits(commit_id) ON DELETE CASCADE; -- -- Name: fields fields_note_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.fields ADD CONSTRAINT fields_note_fkey FOREIGN KEY (note) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: maintainers maintainers_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.maintainers ADD CONSTRAINT maintainers_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: maintainers maintainers_user_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.maintainers ADD CONSTRAINT maintainers_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; -- -- Name: media media_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media ADD CONSTRAINT media_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: media_operations_log media_operations_log_user_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_operations_log ADD CONSTRAINT media_operations_log_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL; -- -- Name: media_references media_references_media_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_references ADD CONSTRAINT media_references_media_id_fkey FOREIGN KEY (media_id) REFERENCES anki.media_files(id) ON DELETE CASCADE; -- -- Name: media_references media_references_note_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.media_references ADD CONSTRAINT media_references_note_id_fkey FOREIGN KEY (note_id) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: mediafolders mediafolders_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.mediafolders ADD CONSTRAINT mediafolders_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: note_move_suggestions note_move_suggestions_commit_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_move_suggestions ADD CONSTRAINT note_move_suggestions_commit_fkey FOREIGN KEY (commit) REFERENCES anki.commits(commit_id) ON DELETE CASCADE; -- -- Name: note_move_suggestions note_move_suggestions_note_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_move_suggestions ADD CONSTRAINT note_move_suggestions_note_fkey FOREIGN KEY (note) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: note_move_suggestions note_move_suggestions_original_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_move_suggestions ADD CONSTRAINT note_move_suggestions_original_deck_fkey FOREIGN KEY (original_deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: note_move_suggestions note_move_suggestions_target_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_move_suggestions ADD CONSTRAINT note_move_suggestions_target_deck_fkey FOREIGN KEY (target_deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: note_stats note_stats_note_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.note_stats ADD CONSTRAINT note_stats_note_id_fkey FOREIGN KEY (note_id) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: notes notes_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notes ADD CONSTRAINT notes_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: notetype_field notetype_field_notetype_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype_field ADD CONSTRAINT notetype_field_notetype_fkey FOREIGN KEY (notetype) REFERENCES anki.notetype(id) ON DELETE CASCADE; -- -- Name: notes notetype_note_constraint; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notes ADD CONSTRAINT notetype_note_constraint FOREIGN KEY (notetype) REFERENCES anki.notetype(id) ON DELETE CASCADE; -- -- Name: notetype notetype_owner_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype ADD CONSTRAINT notetype_owner_fkey FOREIGN KEY (owner) REFERENCES public.users(id) ON DELETE CASCADE; -- -- Name: notetype_template notetype_template_notetype_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.notetype_template ADD CONSTRAINT notetype_template_notetype_fkey FOREIGN KEY (notetype) REFERENCES anki.notetype(id) ON DELETE CASCADE; -- -- Name: optional_tags optional_tags_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.optional_tags ADD CONSTRAINT optional_tags_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: service_accounts service_accounts_deck_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.service_accounts ADD CONSTRAINT service_accounts_deck_fkey FOREIGN KEY (deck) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: subscriptions subscriptions_deck_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.subscriptions ADD CONSTRAINT subscriptions_deck_id_fkey FOREIGN KEY (deck_id) REFERENCES anki.decks(id) ON DELETE CASCADE; -- -- Name: tags tags_commit_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.tags ADD CONSTRAINT tags_commit_fkey FOREIGN KEY (commit) REFERENCES anki.commits(commit_id) ON DELETE CASCADE; -- -- Name: tags tags_note_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.tags ADD CONSTRAINT tags_note_fkey FOREIGN KEY (note) REFERENCES anki.notes(id) ON DELETE CASCADE; -- -- Name: user_quotas user_quotas_user_id_fkey; Type: FK CONSTRAINT; Schema: anki; Owner: postgres -- ALTER TABLE ONLY anki.user_quotas ADD CONSTRAINT user_quotas_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; -- -- Name: SCHEMA public; Type: ACL; Schema: -; Owner: postgres -- REVOKE USAGE ON SCHEMA public FROM PUBLIC; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete --