742 lines
21 KiB
PL/PgSQL
742 lines
21 KiB
PL/PgSQL
-- Downloaded from: https://github.com/Chris-Merced/Classic-Messenger-App-Backend/blob/830ae3a7451ff23d2d41943f7a727008e525e190/schema.sql
|
|
--
|
|
-- PostgreSQL database dump
|
|
--
|
|
|
|
-- Dumped from database version 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1)
|
|
-- Dumped by pg_dump version 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1)
|
|
|
|
SET statement_timeout = 0;
|
|
SET lock_timeout = 0;
|
|
SET idle_in_transaction_session_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: _heroku; Type: SCHEMA; Schema: -; Owner: chris
|
|
--
|
|
|
|
CREATE SCHEMA _heroku;
|
|
|
|
|
|
ALTER SCHEMA _heroku OWNER TO chris;
|
|
|
|
--
|
|
-- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: -
|
|
--
|
|
|
|
CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA public;
|
|
|
|
|
|
--
|
|
-- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner:
|
|
--
|
|
|
|
COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed';
|
|
|
|
|
|
--
|
|
-- Name: create_ext(); Type: FUNCTION; Schema: _heroku; Owner: chris
|
|
--
|
|
|
|
CREATE FUNCTION _heroku.create_ext() RETURNS event_trigger
|
|
LANGUAGE plpgsql SECURITY DEFINER
|
|
AS $$
|
|
|
|
DECLARE
|
|
|
|
schemaname TEXT;
|
|
databaseowner TEXT;
|
|
|
|
r RECORD;
|
|
|
|
BEGIN
|
|
|
|
IF tg_tag = 'CREATE EXTENSION' and current_user != 'rds_superuser' THEN
|
|
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands()
|
|
LOOP
|
|
CONTINUE WHEN r.command_tag != 'CREATE EXTENSION' OR r.object_type != 'extension';
|
|
|
|
schemaname = (
|
|
SELECT n.nspname
|
|
FROM pg_catalog.pg_extension AS e
|
|
INNER JOIN pg_catalog.pg_namespace AS n
|
|
ON e.extnamespace = n.oid
|
|
WHERE e.oid = r.objid
|
|
);
|
|
|
|
databaseowner = (
|
|
SELECT pg_catalog.pg_get_userbyid(d.datdba)
|
|
FROM pg_catalog.pg_database d
|
|
WHERE d.datname = current_database()
|
|
);
|
|
--RAISE NOTICE 'Record for event trigger %, objid: %,tag: %, current_user: %, schema: %, database_owenr: %', r.object_identity, r.objid, tg_tag, current_user, schemaname, databaseowner;
|
|
IF r.object_identity = 'address_standardizer_data_us' THEN
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT, UPDATE, INSERT, DELETE', databaseowner, 'us_gaz');
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT, UPDATE, INSERT, DELETE', databaseowner, 'us_lex');
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT, UPDATE, INSERT, DELETE', databaseowner, 'us_rules');
|
|
ELSIF r.object_identity = 'amcheck' THEN
|
|
EXECUTE format('GRANT EXECUTE ON FUNCTION %I.bt_index_check TO %I;', schemaname, databaseowner);
|
|
EXECUTE format('GRANT EXECUTE ON FUNCTION %I.bt_index_parent_check TO %I;', schemaname, databaseowner);
|
|
ELSIF r.object_identity = 'dict_int' THEN
|
|
EXECUTE format('ALTER TEXT SEARCH DICTIONARY %I.intdict OWNER TO %I;', schemaname, databaseowner);
|
|
ELSIF r.object_identity = 'pg_partman' THEN
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT, UPDATE, INSERT, DELETE', databaseowner, 'part_config');
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT, UPDATE, INSERT, DELETE', databaseowner, 'part_config_sub');
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT, UPDATE, INSERT, DELETE', databaseowner, 'custom_time_partitions');
|
|
ELSIF r.object_identity = 'pg_stat_statements' THEN
|
|
EXECUTE format('GRANT EXECUTE ON FUNCTION %I.pg_stat_statements_reset TO %I;', schemaname, databaseowner);
|
|
ELSIF r.object_identity = 'postgis' THEN
|
|
PERFORM _heroku.postgis_after_create();
|
|
ELSIF r.object_identity = 'postgis_raster' THEN
|
|
PERFORM _heroku.postgis_after_create();
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT', databaseowner, 'raster_columns');
|
|
PERFORM _heroku.grant_table_if_exists(schemaname, 'SELECT', databaseowner, 'raster_overviews');
|
|
ELSIF r.object_identity = 'postgis_topology' THEN
|
|
PERFORM _heroku.postgis_after_create();
|
|
EXECUTE format('GRANT USAGE ON SCHEMA topology TO %I;', databaseowner);
|
|
EXECUTE format('GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA topology TO %I;', databaseowner);
|
|
PERFORM _heroku.grant_table_if_exists('topology', 'SELECT, UPDATE, INSERT, DELETE', databaseowner);
|
|
EXECUTE format('GRANT USAGE, SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA topology TO %I;', databaseowner);
|
|
ELSIF r.object_identity = 'postgis_tiger_geocoder' THEN
|
|
PERFORM _heroku.postgis_after_create();
|
|
EXECUTE format('GRANT USAGE ON SCHEMA tiger TO %I;', databaseowner);
|
|
EXECUTE format('GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA tiger TO %I;', databaseowner);
|
|
PERFORM _heroku.grant_table_if_exists('tiger', 'SELECT, UPDATE, INSERT, DELETE', databaseowner);
|
|
|
|
EXECUTE format('GRANT USAGE ON SCHEMA tiger_data TO %I;', databaseowner);
|
|
EXECUTE format('GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA tiger_data TO %I;', databaseowner);
|
|
PERFORM _heroku.grant_table_if_exists('tiger_data', 'SELECT, UPDATE, INSERT, DELETE', databaseowner);
|
|
END IF;
|
|
END LOOP;
|
|
END IF;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION _heroku.create_ext() OWNER TO chris;
|
|
|
|
--
|
|
-- Name: drop_ext(); Type: FUNCTION; Schema: _heroku; Owner: chris
|
|
--
|
|
|
|
CREATE FUNCTION _heroku.drop_ext() RETURNS event_trigger
|
|
LANGUAGE plpgsql SECURITY DEFINER
|
|
AS $$
|
|
|
|
DECLARE
|
|
|
|
schemaname TEXT;
|
|
databaseowner TEXT;
|
|
|
|
r RECORD;
|
|
|
|
BEGIN
|
|
|
|
IF tg_tag = 'DROP EXTENSION' and current_user != 'rds_superuser' THEN
|
|
FOR r IN SELECT * FROM pg_event_trigger_dropped_objects()
|
|
LOOP
|
|
CONTINUE WHEN r.object_type != 'extension';
|
|
|
|
databaseowner = (
|
|
SELECT pg_catalog.pg_get_userbyid(d.datdba)
|
|
FROM pg_catalog.pg_database d
|
|
WHERE d.datname = current_database()
|
|
);
|
|
|
|
--RAISE NOTICE 'Record for event trigger %, objid: %,tag: %, current_user: %, database_owner: %, schemaname: %', r.object_identity, r.objid, tg_tag, current_user, databaseowner, r.schema_name;
|
|
|
|
IF r.object_identity = 'postgis_topology' THEN
|
|
EXECUTE format('DROP SCHEMA IF EXISTS topology');
|
|
END IF;
|
|
END LOOP;
|
|
|
|
END IF;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION _heroku.drop_ext() OWNER TO chris;
|
|
|
|
--
|
|
-- Name: extension_before_drop(); Type: FUNCTION; Schema: _heroku; Owner: chris
|
|
--
|
|
|
|
CREATE FUNCTION _heroku.extension_before_drop() RETURNS event_trigger
|
|
LANGUAGE plpgsql SECURITY DEFINER
|
|
AS $$
|
|
|
|
DECLARE
|
|
|
|
query TEXT;
|
|
|
|
BEGIN
|
|
query = (SELECT current_query());
|
|
|
|
-- RAISE NOTICE 'executing extension_before_drop: tg_event: %, tg_tag: %, current_user: %, session_user: %, query: %', tg_event, tg_tag, current_user, session_user, query;
|
|
IF tg_tag = 'DROP EXTENSION' and not pg_has_role(session_user, 'rds_superuser', 'MEMBER') THEN
|
|
-- DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
|
|
IF (regexp_match(query, 'DROP\s+EXTENSION\s+(IF\s+EXISTS)?.*(plpgsql)', 'i') IS NOT NULL) THEN
|
|
RAISE EXCEPTION 'The plpgsql extension is required for database management and cannot be dropped.';
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION _heroku.extension_before_drop() OWNER TO chris;
|
|
|
|
--
|
|
-- Name: grant_table_if_exists(text, text, text, text); Type: FUNCTION; Schema: _heroku; Owner: chris
|
|
--
|
|
|
|
CREATE FUNCTION _heroku.grant_table_if_exists(alias_schemaname text, grants text, databaseowner text, alias_tablename text DEFAULT NULL::text) RETURNS void
|
|
LANGUAGE plpgsql SECURITY DEFINER
|
|
AS $$
|
|
|
|
BEGIN
|
|
|
|
IF alias_tablename IS NULL THEN
|
|
EXECUTE format('GRANT %s ON ALL TABLES IN SCHEMA %I TO %I;', grants, alias_schemaname, databaseowner);
|
|
ELSE
|
|
IF EXISTS (SELECT 1 FROM pg_tables WHERE pg_tables.schemaname = alias_schemaname AND pg_tables.tablename = alias_tablename) THEN
|
|
EXECUTE format('GRANT %s ON TABLE %I.%I TO %I;', grants, alias_schemaname, alias_tablename, databaseowner);
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION _heroku.grant_table_if_exists(alias_schemaname text, grants text, databaseowner text, alias_tablename text) OWNER TO chris;
|
|
|
|
--
|
|
-- Name: postgis_after_create(); Type: FUNCTION; Schema: _heroku; Owner: chris
|
|
--
|
|
|
|
CREATE FUNCTION _heroku.postgis_after_create() RETURNS void
|
|
LANGUAGE plpgsql SECURITY DEFINER
|
|
AS $$
|
|
DECLARE
|
|
schemaname TEXT;
|
|
databaseowner TEXT;
|
|
BEGIN
|
|
schemaname = (
|
|
SELECT n.nspname
|
|
FROM pg_catalog.pg_extension AS e
|
|
INNER JOIN pg_catalog.pg_namespace AS n ON e.extnamespace = n.oid
|
|
WHERE e.extname = 'postgis'
|
|
);
|
|
databaseowner = (
|
|
SELECT pg_catalog.pg_get_userbyid(d.datdba)
|
|
FROM pg_catalog.pg_database d
|
|
WHERE d.datname = current_database()
|
|
);
|
|
|
|
EXECUTE format('GRANT EXECUTE ON FUNCTION %I.st_tileenvelope TO %I;', schemaname, databaseowner);
|
|
EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.spatial_ref_sys TO %I;', schemaname, databaseowner);
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION _heroku.postgis_after_create() OWNER TO chris;
|
|
|
|
--
|
|
-- Name: validate_extension(); Type: FUNCTION; Schema: _heroku; Owner: chris
|
|
--
|
|
|
|
CREATE FUNCTION _heroku.validate_extension() RETURNS event_trigger
|
|
LANGUAGE plpgsql SECURITY DEFINER
|
|
AS $$
|
|
|
|
DECLARE
|
|
|
|
schemaname TEXT;
|
|
r RECORD;
|
|
|
|
BEGIN
|
|
|
|
IF tg_tag = 'CREATE EXTENSION' and current_user != 'rds_superuser' THEN
|
|
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands()
|
|
LOOP
|
|
CONTINUE WHEN r.command_tag != 'CREATE EXTENSION' OR r.object_type != 'extension';
|
|
|
|
schemaname = (
|
|
SELECT n.nspname
|
|
FROM pg_catalog.pg_extension AS e
|
|
INNER JOIN pg_catalog.pg_namespace AS n
|
|
ON e.extnamespace = n.oid
|
|
WHERE e.oid = r.objid
|
|
);
|
|
|
|
IF schemaname = '_heroku' THEN
|
|
RAISE EXCEPTION 'Creating extensions in the _heroku schema is not allowed';
|
|
END IF;
|
|
END LOOP;
|
|
END IF;
|
|
END;
|
|
$$;
|
|
|
|
|
|
ALTER FUNCTION _heroku.validate_extension() OWNER TO chris;
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = heap;
|
|
|
|
--
|
|
-- Name: blocked; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.blocked (
|
|
user_id integer NOT NULL,
|
|
blocked_id integer NOT NULL
|
|
);
|
|
|
|
|
|
ALTER TABLE public.blocked OWNER TO chris;
|
|
|
|
--
|
|
-- Name: conversation_participants; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.conversation_participants (
|
|
id integer NOT NULL,
|
|
conversation_id integer,
|
|
user_id integer,
|
|
added_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
|
|
ALTER TABLE public.conversation_participants OWNER TO chris;
|
|
|
|
--
|
|
-- Name: conversation_participants_id_seq; Type: SEQUENCE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE SEQUENCE public.conversation_participants_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER SEQUENCE public.conversation_participants_id_seq OWNER TO chris;
|
|
|
|
--
|
|
-- Name: conversation_participants_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER SEQUENCE public.conversation_participants_id_seq OWNED BY public.conversation_participants.id;
|
|
|
|
|
|
--
|
|
-- Name: conversations; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.conversations (
|
|
id integer NOT NULL,
|
|
name character varying(100),
|
|
is_group boolean DEFAULT false,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
|
|
ALTER TABLE public.conversations OWNER TO chris;
|
|
|
|
--
|
|
-- Name: conversations_id_seq; Type: SEQUENCE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE SEQUENCE public.conversations_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER SEQUENCE public.conversations_id_seq OWNER TO chris;
|
|
|
|
--
|
|
-- Name: conversations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER SEQUENCE public.conversations_id_seq OWNED BY public.conversations.id;
|
|
|
|
|
|
--
|
|
-- Name: friend_requests; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.friend_requests (
|
|
user_id integer NOT NULL,
|
|
request_id integer NOT NULL,
|
|
status character varying(10),
|
|
CONSTRAINT friend_requests_status_check CHECK (((status)::text = ANY ((ARRAY['pending'::character varying, 'accepted'::character varying, 'rejected'::character varying])::text[])))
|
|
);
|
|
|
|
|
|
ALTER TABLE public.friend_requests OWNER TO chris;
|
|
|
|
--
|
|
-- Name: friends; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.friends (
|
|
user_id integer NOT NULL,
|
|
friend_id integer NOT NULL,
|
|
CONSTRAINT friends_check CHECK ((user_id < friend_id))
|
|
);
|
|
|
|
|
|
ALTER TABLE public.friends OWNER TO chris;
|
|
|
|
--
|
|
-- Name: messages; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.messages (
|
|
id integer NOT NULL,
|
|
conversation_id integer,
|
|
sender_id integer,
|
|
content text NOT NULL,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
is_read boolean DEFAULT false
|
|
);
|
|
|
|
|
|
ALTER TABLE public.messages OWNER TO chris;
|
|
|
|
--
|
|
-- Name: messages_id_seq; Type: SEQUENCE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE SEQUENCE public.messages_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
ALTER SEQUENCE public.messages_id_seq OWNER TO chris;
|
|
|
|
--
|
|
-- Name: messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER SEQUENCE public.messages_id_seq OWNED BY public.messages.id;
|
|
|
|
|
|
--
|
|
-- Name: sessions; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.sessions (
|
|
session_id character varying(255) NOT NULL,
|
|
user_id integer,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
expires_at timestamp without time zone
|
|
);
|
|
|
|
|
|
ALTER TABLE public.sessions OWNER TO chris;
|
|
|
|
--
|
|
-- Name: users; Type: TABLE; Schema: public; Owner: chris
|
|
--
|
|
|
|
CREATE TABLE public.users (
|
|
id integer NOT NULL,
|
|
username character varying(50) NOT NULL,
|
|
password character varying(255) NOT NULL,
|
|
email character varying(100),
|
|
is_admin boolean DEFAULT false,
|
|
created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
is_public boolean DEFAULT true,
|
|
profile_picture character varying(500) DEFAULT NULL::character varying,
|
|
about_me character varying(500)
|
|
);
|
|
|
|
|
|
ALTER TABLE public.users OWNER TO chris;
|
|
|
|
--
|
|
-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: chris
|
|
--
|
|
|
|
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 chris;
|
|
|
|
--
|
|
-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id;
|
|
|
|
|
|
--
|
|
-- Name: conversation_participants id; Type: DEFAULT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.conversation_participants ALTER COLUMN id SET DEFAULT nextval('public.conversation_participants_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: conversations id; Type: DEFAULT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.conversations ALTER COLUMN id SET DEFAULT nextval('public.conversations_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: messages id; Type: DEFAULT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.messages ALTER COLUMN id SET DEFAULT nextval('public.messages_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: users id; Type: DEFAULT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: blocked blocked_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.blocked
|
|
ADD CONSTRAINT blocked_pkey PRIMARY KEY (user_id, blocked_id);
|
|
|
|
|
|
--
|
|
-- Name: conversation_participants conversation_participants_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.conversation_participants
|
|
ADD CONSTRAINT conversation_participants_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: conversations conversations_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.conversations
|
|
ADD CONSTRAINT conversations_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: friend_requests friend_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.friend_requests
|
|
ADD CONSTRAINT friend_requests_pkey PRIMARY KEY (user_id, request_id);
|
|
|
|
|
|
--
|
|
-- Name: friends friends_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.friends
|
|
ADD CONSTRAINT friends_pkey PRIMARY KEY (user_id, friend_id);
|
|
|
|
|
|
--
|
|
-- Name: messages messages_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.messages
|
|
ADD CONSTRAINT messages_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.sessions
|
|
ADD CONSTRAINT sessions_pkey PRIMARY KEY (session_id);
|
|
|
|
|
|
--
|
|
-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_email_key UNIQUE (email);
|
|
|
|
|
|
--
|
|
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: users users_username_key; Type: CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_username_key UNIQUE (username);
|
|
|
|
|
|
--
|
|
-- Name: blocked blocked_blocked_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.blocked
|
|
ADD CONSTRAINT blocked_blocked_id_fkey FOREIGN KEY (blocked_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: blocked blocked_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.blocked
|
|
ADD CONSTRAINT blocked_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: conversation_participants conversation_participants_conversation_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.conversation_participants
|
|
ADD CONSTRAINT conversation_participants_conversation_id_fkey FOREIGN KEY (conversation_id) REFERENCES public.conversations(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: conversation_participants conversation_participants_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.conversation_participants
|
|
ADD CONSTRAINT conversation_participants_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: friend_requests friend_requests_request_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.friend_requests
|
|
ADD CONSTRAINT friend_requests_request_id_fkey FOREIGN KEY (request_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: friend_requests friend_requests_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.friend_requests
|
|
ADD CONSTRAINT friend_requests_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: friends friends_friend_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.friends
|
|
ADD CONSTRAINT friends_friend_id_fkey FOREIGN KEY (friend_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: friends friends_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.friends
|
|
ADD CONSTRAINT friends_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: messages messages_conversation_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.messages
|
|
ADD CONSTRAINT messages_conversation_id_fkey FOREIGN KEY (conversation_id) REFERENCES public.conversations(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: messages messages_sender_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.messages
|
|
ADD CONSTRAINT messages_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES public.users(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: chris
|
|
--
|
|
|
|
ALTER TABLE ONLY public.sessions
|
|
ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner
|
|
--
|
|
|
|
REVOKE USAGE ON SCHEMA public FROM PUBLIC;
|
|
|
|
|
|
--
|
|
-- Name: extension_before_drop; Type: EVENT TRIGGER; Schema: -; Owner: chris
|
|
--
|
|
|
|
CREATE EVENT TRIGGER extension_before_drop ON ddl_command_start
|
|
EXECUTE FUNCTION _heroku.extension_before_drop();
|
|
|
|
|
|
ALTER EVENT TRIGGER extension_before_drop OWNER TO chris;
|
|
|
|
--
|
|
-- Name: log_create_ext; Type: EVENT TRIGGER; Schema: -; Owner: chris
|
|
--
|
|
|
|
CREATE EVENT TRIGGER log_create_ext ON ddl_command_end
|
|
EXECUTE FUNCTION _heroku.create_ext();
|
|
|
|
|
|
ALTER EVENT TRIGGER log_create_ext OWNER TO chris;
|
|
|
|
--
|
|
-- Name: log_drop_ext; Type: EVENT TRIGGER; Schema: -; Owner: chris
|
|
--
|
|
|
|
CREATE EVENT TRIGGER log_drop_ext ON sql_drop
|
|
EXECUTE FUNCTION _heroku.drop_ext();
|
|
|
|
|
|
ALTER EVENT TRIGGER log_drop_ext OWNER TO chris;
|
|
|
|
--
|
|
-- Name: validate_extension; Type: EVENT TRIGGER; Schema: -; Owner: chris
|
|
--
|
|
|
|
CREATE EVENT TRIGGER validate_extension ON ddl_command_end
|
|
EXECUTE FUNCTION _heroku.validate_extension();
|
|
|
|
|
|
ALTER EVENT TRIGGER validate_extension OWNER TO chris;
|
|
|
|
--
|
|
-- PostgreSQL database dump complete
|
|
--
|
|
|