-- Downloaded from: https://github.com/cardox6/pagila/blob/17bb8923cb70075fa8a75f9e76ee3d3c5987f962/pagila-schema.sql -- -- PostgreSQL database dump -- -- Dumped from database version 16.0 -- Dumped by pg_dump version 16.0 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: legacy; Type: SCHEMA; Schema: -; Owner: postgres -- CREATE SCHEMA legacy; ALTER SCHEMA legacy OWNER TO postgres; -- -- Name: mpaa_rating; Type: TYPE; Schema: public; Owner: postgres -- CREATE TYPE public.mpaa_rating AS ENUM ( 'G', 'PG', 'PG-13', 'R', 'NC-17' ); ALTER TYPE public.mpaa_rating OWNER TO postgres; -- -- Name: year; Type: DOMAIN; Schema: public; Owner: postgres -- CREATE DOMAIN public.year AS integer CONSTRAINT year_check CHECK (((VALUE >= 1901) AND (VALUE <= 2155))); ALTER DOMAIN public.year OWNER TO postgres; -- -- Name: _group_concat(text, text); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public._group_concat(text, text) RETURNS text LANGUAGE sql IMMUTABLE AS $_$ SELECT CASE WHEN $2 IS NULL THEN $1 WHEN $1 IS NULL THEN $2 ELSE $1 || ', ' || $2 END $_$; ALTER FUNCTION public._group_concat(text, text) OWNER TO postgres; -- -- Name: film_in_stock(integer, integer); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.film_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) RETURNS SETOF integer LANGUAGE sql AS $_$ SELECT inventory_id FROM inventory WHERE film_id = $1 AND store_id = $2 AND inventory_in_stock(inventory_id); $_$; ALTER FUNCTION public.film_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) OWNER TO postgres; -- -- Name: film_not_in_stock(integer, integer); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.film_not_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) RETURNS SETOF integer LANGUAGE sql AS $_$ SELECT inventory_id FROM inventory WHERE film_id = $1 AND store_id = $2 AND NOT inventory_in_stock(inventory_id); $_$; ALTER FUNCTION public.film_not_in_stock(p_film_id integer, p_store_id integer, OUT p_film_count integer) OWNER TO postgres; -- -- Name: get_customer_balance(integer, timestamp without time zone); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.get_customer_balance(p_customer_id integer, p_effective_date timestamp without time zone) RETURNS numeric LANGUAGE plpgsql AS $$ --#OK, WE NEED TO CALCULATE THE CURRENT BALANCE GIVEN A CUSTOMER_ID AND A DATE --#THAT WE WANT THE BALANCE TO BE EFFECTIVE FOR. THE BALANCE IS: --# 1) RENTAL FEES FOR ALL PREVIOUS RENTALS --# 2) ONE DOLLAR FOR EVERY DAY THE PREVIOUS RENTALS ARE OVERDUE --# 3) IF A FILM IS MORE THAN RENTAL_DURATION * 2 OVERDUE, CHARGE THE REPLACEMENT_COST --# 4) SUBTRACT ALL PAYMENTS MADE BEFORE THE DATE SPECIFIED DECLARE v_rentfees DECIMAL(5,2); --#FEES PAID TO RENT THE VIDEOS INITIALLY v_overfees INTEGER; --#LATE FEES FOR PRIOR RENTALS v_payments DECIMAL(5,2); --#SUM OF PAYMENTS MADE PREVIOUSLY BEGIN SELECT COALESCE(SUM(film.rental_rate),0) INTO v_rentfees FROM film, inventory, rental WHERE film.film_id = inventory.film_id AND inventory.inventory_id = rental.inventory_id AND rental.rental_date <= p_effective_date AND rental.customer_id = p_customer_id; SELECT COALESCE(SUM(IF((rental.return_date - rental.rental_date) > (film.rental_duration * '1 day'::interval), ((rental.return_date - rental.rental_date) - (film.rental_duration * '1 day'::interval)),0)),0) INTO v_overfees FROM rental, inventory, film WHERE film.film_id = inventory.film_id AND inventory.inventory_id = rental.inventory_id AND rental.rental_date <= p_effective_date AND rental.customer_id = p_customer_id; SELECT COALESCE(SUM(payment.amount),0) INTO v_payments FROM payment WHERE payment.payment_date <= p_effective_date AND payment.customer_id = p_customer_id; RETURN v_rentfees + v_overfees - v_payments; END $$; ALTER FUNCTION public.get_customer_balance(p_customer_id integer, p_effective_date timestamp without time zone) OWNER TO postgres; -- -- Name: inventory_held_by_customer(integer); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.inventory_held_by_customer(p_inventory_id integer) RETURNS integer LANGUAGE plpgsql AS $$ DECLARE v_customer_id INTEGER; BEGIN SELECT customer_id INTO v_customer_id FROM rental WHERE return_date IS NULL AND inventory_id = p_inventory_id; RETURN v_customer_id; END $$; ALTER FUNCTION public.inventory_held_by_customer(p_inventory_id integer) OWNER TO postgres; -- -- Name: inventory_in_stock(integer); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.inventory_in_stock(p_inventory_id integer) RETURNS boolean LANGUAGE plpgsql AS $$ DECLARE v_rentals INTEGER; v_out INTEGER; BEGIN -- AN ITEM IS IN-STOCK IF THERE ARE EITHER NO ROWS IN THE rental TABLE -- FOR THE ITEM OR ALL ROWS HAVE return_date POPULATED SELECT count(*) INTO v_rentals FROM rental WHERE inventory_id = p_inventory_id; IF v_rentals = 0 THEN RETURN TRUE; END IF; SELECT COUNT(rental_id) INTO v_out FROM inventory LEFT JOIN rental USING(inventory_id) WHERE inventory.inventory_id = p_inventory_id AND rental.return_date IS NULL; IF v_out > 0 THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END $$; ALTER FUNCTION public.inventory_in_stock(p_inventory_id integer) OWNER TO postgres; -- -- Name: last_day(timestamp without time zone); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.last_day(timestamp without time zone) RETURNS date LANGUAGE sql IMMUTABLE STRICT AS $_$ SELECT CASE WHEN EXTRACT(MONTH FROM $1) = 12 THEN (((EXTRACT(YEAR FROM $1) + 1) operator(pg_catalog.||) '-01-01')::date - INTERVAL '1 day')::date ELSE ((EXTRACT(YEAR FROM $1) operator(pg_catalog.||) '-' operator(pg_catalog.||) (EXTRACT(MONTH FROM $1) + 1) operator(pg_catalog.||) '-01')::date - INTERVAL '1 day')::date END $_$; ALTER FUNCTION public.last_day(timestamp without time zone) OWNER TO postgres; -- -- Name: last_updated(); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.last_updated() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN NEW.last_update := CURRENT_TIMESTAMP; RETURN NEW; END $$; ALTER FUNCTION public.last_updated() OWNER TO postgres; -- -- Name: make_payment_data_current(); Type: PROCEDURE; Schema: public; Owner: postgres -- CREATE PROCEDURE public.make_payment_data_current() LANGUAGE plpgsql SECURITY DEFINER AS $$ BEGIN LOCK TABLE payment IN ACCESS EXCLUSIVE MODE; CREATE temporary TABLE currentized_payments ON COMMIT DROP AS SELECT payment_id, customer_id, staff_id, rental_id, amount, payment_date + (now() - (select max(payment_date) from payment)) as payment_date FROM payment ORDER BY 6; TRUNCATE payment; DROP TABLE IF EXISTS payment_p2007_07_max; EXECUTE (with dates as (select date_trunc('month',generate_series(min,max,'1 month')) d from (select min(payment_date), max(payment_date) from currentized_payments) payments_range) select replace(group_concat( 'CREATE TABLE IF NOT EXISTS payment_p' || replace(date_trunc('month',d)::date::text,'-','_') || ' PARTITION OF payment FOR VALUES FROM (' || quote_literal(d::date) || ') TO (' || CASE WHEN d+'1 month'::interval < current_date THEN quote_literal((d+'1 month'::interval)::date) ELSE 'MAXVALUE' END || ')' ) , ',',';') from dates); insert into payment select * from currentized_payments; analyze payment; return; END $$; ALTER PROCEDURE public.make_payment_data_current() OWNER TO postgres; -- -- Name: payment_id_change_handler(integer, integer, smallint, smallint, integer, numeric, timestamp with time zone); Type: FUNCTION; Schema: public; Owner: postgres -- CREATE FUNCTION public.payment_id_change_handler(old_payment_id integer, new_payment_id integer, new_customer_id smallint, new_staff_id smallint, new_rental_id integer, new_amount numeric, new_payment_date timestamp with time zone) RETURNS void LANGUAGE plpgsql AS $$ DECLARE v_devnull int; BEGIN SELECT 1 FROM payment WHERE payment_id = new_payment_id INTO v_devnull; IF FOUND THEN RAISE USING ERRCODE = '23505', MESSAGE = 'duplicate key violation', DETAIL = 'Key (payment_id)=('||new_payment_id||') already exists.'; END IF; DELETE FROM payment WHERE payment_id = old_payment_id; INSERT INTO payment (payment_id, customer_id, staff_id, rental_id, amount, payment_date) VALUES (new_payment_id, new_customer_id, new_staff_id, new_rental_id, new_amount, new_payment_date); RETURN; END $$; ALTER FUNCTION public.payment_id_change_handler(old_payment_id integer, new_payment_id integer, new_customer_id smallint, new_staff_id smallint, new_rental_id integer, new_amount numeric, new_payment_date timestamp with time zone) OWNER TO postgres; -- -- Name: rewards_report(integer, numeric, date, refcursor, refcursor); Type: PROCEDURE; Schema: public; Owner: postgres -- CREATE PROCEDURE public.rewards_report(IN min_monthly_purchases integer, IN min_dollar_amount_purchased numeric, IN report_month date DEFAULT CURRENT_DATE, INOUT refcur_client refcursor DEFAULT 'rewardees_detail'::refcursor, INOUT refcur_count refcursor DEFAULT 'rewardees_count'::refcursor) LANGUAGE plpgsql SECURITY DEFINER AS $_$ DECLARE last_month_start DATE; last_month_end DATE; rewards_count INTEGER; tmpSQL TEXT; BEGIN /* Some sanity checks... */ IF min_monthly_purchases <= 0 THEN RAISE EXCEPTION 'Minimum monthly purchases parameter must be > 0'; END IF; IF min_dollar_amount_purchased <= 0.00 THEN RAISE EXCEPTION 'Minimum monthly dollar amount purchased parameter must be > $0.00'; END IF; last_month_start := to_date((extract(YEAR FROM report_month) || '-' || extract(MONTH FROM report_month) || '-01'),'YYYY-MM-DD'); last_month_end := LAST_DAY(last_month_start); --DEBUG RAISE NOTICE '% - %', last_month_start, last_month_end; /* Create a temporary storage area for Customer IDs. */ CREATE TEMPORARY TABLE tmpCustomer (customer_id INTEGER NOT NULL PRIMARY KEY) ON COMMIT DROP; /* Find all customers meeting the monthly purchase requirements */ tmpSQL := 'INSERT INTO tmpCustomer (customer_id) SELECT p.customer_id FROM payment AS p WHERE DATE(p.payment_date) BETWEEN '||quote_literal(last_month_start) ||' AND '|| quote_literal(last_month_end) || ' GROUP BY customer_id HAVING SUM(p.amount) > '|| min_dollar_amount_purchased || ' AND COUNT(customer_id) > ' ||min_monthly_purchases ; --DEBUG RAISE NOTICE '%', tmpSQL; EXECUTE tmpSQL; /* Output ALL customer information of matching rewardees. Customize output as needed. */ OPEN refcur_client FOR SELECT c.* FROM tmpCustomer AS t INNER JOIN customer AS c ON t.customer_id = c.customer_id; GET DIAGNOSTICS rewards_count := ROW_COUNT; OPEN refcur_count FOR SELECT rewards_count; /* Note: Due to use of cursors, we must use this procedure within a transaction to retrieve the cursor results. As an example: begin; call rewards_report(5,25,'2007-01-01'::date); fetch all in rewardees_count; fetch all in rewardees_detail; commit; */ RETURN; END $_$; ALTER PROCEDURE public.rewards_report(IN min_monthly_purchases integer, IN min_dollar_amount_purchased numeric, IN report_month date, INOUT refcur_client refcursor, INOUT refcur_count refcursor) OWNER TO postgres; -- -- Name: group_concat(text); Type: AGGREGATE; Schema: public; Owner: postgres -- CREATE AGGREGATE public.group_concat(text) ( SFUNC = public._group_concat, STYPE = text ); ALTER AGGREGATE public.group_concat(text) OWNER TO postgres; -- -- Name: rental_rental_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.rental_rental_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.rental_rental_id_seq OWNER TO postgres; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: rental; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.rental ( rental_id integer DEFAULT nextval('public.rental_rental_id_seq'::regclass) NOT NULL, inventory_id integer NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL, rental_period tsrange DEFAULT tsrange((now())::timestamp without time zone, NULL::timestamp without time zone) NOT NULL ); ALTER TABLE public.rental OWNER TO postgres; -- -- Name: rental; Type: VIEW; Schema: legacy; Owner: postgres -- CREATE VIEW legacy.rental AS SELECT rental_id, lower(rental_period) AS rental_date, inventory_id, customer_id, upper(rental_period) AS return_date, staff_id, last_update FROM public.rental; ALTER VIEW legacy.rental OWNER TO postgres; -- -- Name: actor_actor_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.actor_actor_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.actor_actor_id_seq OWNER TO postgres; -- -- Name: actor; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.actor ( actor_id integer DEFAULT nextval('public.actor_actor_id_seq'::regclass) NOT NULL, first_name character varying(45) NOT NULL, last_name character varying(45) NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.actor OWNER TO postgres; -- -- Name: category_category_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.category_category_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.category_category_id_seq OWNER TO postgres; -- -- Name: category; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.category ( category_id integer DEFAULT nextval('public.category_category_id_seq'::regclass) NOT NULL, name character varying(25) NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.category OWNER TO postgres; -- -- Name: film_film_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.film_film_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.film_film_id_seq OWNER TO postgres; -- -- Name: film; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.film ( film_id integer DEFAULT nextval('public.film_film_id_seq'::regclass) NOT NULL, title character varying(255) NOT NULL, description text, release_year public.year, language_id smallint NOT NULL, original_language_id smallint, rental_duration smallint DEFAULT 3 NOT NULL, rental_rate numeric(4,2) DEFAULT 4.99 NOT NULL, length smallint, replacement_cost numeric(5,2) DEFAULT 19.99 NOT NULL, rating public.mpaa_rating DEFAULT 'G'::public.mpaa_rating, last_update timestamp without time zone DEFAULT now() NOT NULL, special_features text[], fulltext tsvector NOT NULL, revenue_projection numeric(5,2) GENERATED ALWAYS AS (((rental_duration)::numeric * rental_rate)) STORED ); ALTER TABLE public.film OWNER TO postgres; -- -- Name: film_actor; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.film_actor ( actor_id smallint NOT NULL, film_id smallint NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.film_actor OWNER TO postgres; -- -- Name: film_category; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.film_category ( film_id smallint NOT NULL, category_id smallint NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.film_category OWNER TO postgres; -- -- Name: actor_info; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.actor_info AS SELECT a.actor_id, a.first_name, a.last_name, public.group_concat(DISTINCT (((c.name)::text || ': '::text) || ( SELECT public.group_concat((f.title)::text) AS group_concat FROM ((public.film f JOIN public.film_category fc_1 ON ((f.film_id = fc_1.film_id))) JOIN public.film_actor fa_1 ON ((f.film_id = fa_1.film_id))) WHERE ((fc_1.category_id = c.category_id) AND (fa_1.actor_id = a.actor_id)) GROUP BY fa_1.actor_id))) AS film_info FROM (((public.actor a LEFT JOIN public.film_actor fa ON ((a.actor_id = fa.actor_id))) LEFT JOIN public.film_category fc ON ((fa.film_id = fc.film_id))) LEFT JOIN public.category c ON ((fc.category_id = c.category_id))) GROUP BY a.actor_id, a.first_name, a.last_name; ALTER VIEW public.actor_info OWNER TO postgres; -- -- Name: address_address_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.address_address_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.address_address_id_seq OWNER TO postgres; -- -- Name: address; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.address ( address_id integer DEFAULT nextval('public.address_address_id_seq'::regclass) NOT NULL, address character varying(50) NOT NULL, address2 character varying(50), district character varying(20) NOT NULL, city_id smallint NOT NULL, postal_code character varying(10), phone character varying(20) NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.address OWNER TO postgres; -- -- Name: city_city_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.city_city_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.city_city_id_seq OWNER TO postgres; -- -- Name: city; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.city ( city_id integer DEFAULT nextval('public.city_city_id_seq'::regclass) NOT NULL, city character varying(50) NOT NULL, country_id smallint NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.city OWNER TO postgres; -- -- Name: country_country_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.country_country_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.country_country_id_seq OWNER TO postgres; -- -- Name: country; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.country ( country_id integer DEFAULT nextval('public.country_country_id_seq'::regclass) NOT NULL, country character varying(50) NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.country OWNER TO postgres; -- -- Name: customer_customer_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.customer_customer_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.customer_customer_id_seq OWNER TO postgres; -- -- Name: customer; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.customer ( customer_id integer DEFAULT nextval('public.customer_customer_id_seq'::regclass) NOT NULL, store_id smallint NOT NULL, first_name character varying(45) NOT NULL, last_name character varying(45) NOT NULL, email character varying(50), address_id smallint NOT NULL, activebool boolean DEFAULT true NOT NULL, create_date date DEFAULT CURRENT_DATE NOT NULL, last_update timestamp without time zone DEFAULT now(), active smallint GENERATED ALWAYS AS ( CASE WHEN (activebool IS TRUE) THEN 1 ELSE 0 END) STORED ); ALTER TABLE public.customer OWNER TO postgres; -- -- Name: customer_list; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.customer_list AS SELECT cu.customer_id AS id, (((cu.first_name)::text || ' '::text) || (cu.last_name)::text) AS name, a.address, a.postal_code AS "zip code", a.phone, city.city, country.country, CASE WHEN cu.activebool THEN 'active'::text ELSE ''::text END AS notes, cu.store_id AS sid FROM (((public.customer cu JOIN public.address a ON ((cu.address_id = a.address_id))) JOIN public.city ON ((a.city_id = city.city_id))) JOIN public.country ON ((city.country_id = country.country_id))); ALTER VIEW public.customer_list OWNER TO postgres; -- -- Name: film_list; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.film_list AS SELECT film.film_id AS fid, film.title, film.description, category.name AS category, film.rental_rate AS price, film.length, film.rating, public.group_concat((((actor.first_name)::text || ' '::text) || (actor.last_name)::text)) AS actors FROM ((((public.category LEFT JOIN public.film_category ON ((category.category_id = film_category.category_id))) LEFT JOIN public.film ON ((film_category.film_id = film.film_id))) LEFT JOIN public.film_actor ON ((film.film_id = film_actor.film_id))) LEFT JOIN public.actor ON ((film_actor.actor_id = actor.actor_id))) GROUP BY film.film_id, film.title, film.description, category.name, film.rental_rate, film.length, film.rating; ALTER VIEW public.film_list OWNER TO postgres; -- -- Name: inventory_inventory_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.inventory_inventory_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.inventory_inventory_id_seq OWNER TO postgres; -- -- Name: inventory; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.inventory ( inventory_id integer DEFAULT nextval('public.inventory_inventory_id_seq'::regclass) NOT NULL, film_id smallint NOT NULL, store_id smallint NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.inventory OWNER TO postgres; -- -- Name: language_language_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.language_language_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.language_language_id_seq OWNER TO postgres; -- -- Name: language; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.language ( language_id integer DEFAULT nextval('public.language_language_id_seq'::regclass) NOT NULL, name character(20) NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.language OWNER TO postgres; -- -- Name: nicer_but_slower_film_list; Type: MATERIALIZED VIEW; Schema: public; Owner: postgres -- CREATE MATERIALIZED VIEW public.nicer_but_slower_film_list AS SELECT film.film_id AS fid, film.title, film.description, category.name AS category, film.rental_rate AS price, film.length, film.rating, public.group_concat(((((upper("substring"((actor.first_name)::text, 1, 1)) || lower("substring"((actor.first_name)::text, 2))) || ' '::text) || upper("substring"((actor.last_name)::text, 1, 1))) || lower("substring"((actor.last_name)::text, 2)))) AS actors FROM ((((public.category LEFT JOIN public.film_category ON ((category.category_id = film_category.category_id))) LEFT JOIN public.film ON ((film_category.film_id = film.film_id))) LEFT JOIN public.film_actor ON ((film.film_id = film_actor.film_id))) LEFT JOIN public.actor ON ((film_actor.actor_id = actor.actor_id))) GROUP BY film.film_id, film.title, film.description, category.name, film.rental_rate, film.length, film.rating WITH NO DATA; ALTER MATERIALIZED VIEW public.nicer_but_slower_film_list OWNER TO postgres; -- -- Name: payment_payment_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.payment_payment_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.payment_payment_id_seq OWNER TO postgres; -- -- Name: payment; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ) PARTITION BY RANGE (payment_date); ALTER TABLE public.payment OWNER TO postgres; -- -- Name: payment_p0000_default; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p0000_default ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p0000_default OWNER TO postgres; -- -- Name: payment_p2007_01; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_01 ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_01 OWNER TO postgres; -- -- Name: payment_p2007_02; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_02 ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_02 OWNER TO postgres; -- -- Name: payment_p2007_03; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_03 ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_03 OWNER TO postgres; -- -- Name: payment_p2007_04; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_04 ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_04 OWNER TO postgres; -- -- Name: payment_p2007_05; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_05 ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_05 OWNER TO postgres; -- -- Name: payment_p2007_06; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_06 ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_06 OWNER TO postgres; -- -- Name: payment_p2007_07_max; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.payment_p2007_07_max ( payment_id integer DEFAULT nextval('public.payment_payment_id_seq'::regclass) NOT NULL, customer_id smallint NOT NULL, staff_id smallint NOT NULL, rental_id integer NOT NULL, amount numeric(5,2) NOT NULL, payment_date timestamp without time zone NOT NULL ); ALTER TABLE public.payment_p2007_07_max OWNER TO postgres; -- -- Name: rental_report; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.rental_report AS SELECT NULL::jsonb AS report; ALTER VIEW public.rental_report OWNER TO postgres; -- -- Name: sales_by_film_category; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.sales_by_film_category AS SELECT c.name AS category, sum(p.amount) AS total_sales FROM (((((public.payment p JOIN public.rental r ON ((p.rental_id = r.rental_id))) JOIN public.inventory i ON ((r.inventory_id = i.inventory_id))) JOIN public.film f ON ((i.film_id = f.film_id))) JOIN public.film_category fc ON ((f.film_id = fc.film_id))) JOIN public.category c ON ((fc.category_id = c.category_id))) GROUP BY c.name ORDER BY (sum(p.amount)) DESC; ALTER VIEW public.sales_by_film_category OWNER TO postgres; -- -- Name: VIEW sales_by_film_category; Type: COMMENT; Schema: public; Owner: postgres -- COMMENT ON VIEW public.sales_by_film_category IS 'Note that total sales will add up to >100% because some titles belong to more than one category'; -- -- Name: staff_staff_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.staff_staff_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.staff_staff_id_seq OWNER TO postgres; -- -- Name: staff; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.staff ( staff_id integer DEFAULT nextval('public.staff_staff_id_seq'::regclass) NOT NULL, first_name character varying(45) NOT NULL, last_name character varying(45) NOT NULL, address_id smallint NOT NULL, email character varying(50), store_id smallint NOT NULL, active boolean DEFAULT true NOT NULL, username character varying(16) NOT NULL, password character varying(40), last_update timestamp without time zone DEFAULT now() NOT NULL, picture bytea ); ALTER TABLE public.staff OWNER TO postgres; -- -- Name: store_store_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- CREATE SEQUENCE public.store_store_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER SEQUENCE public.store_store_id_seq OWNER TO postgres; -- -- Name: store; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.store ( store_id integer DEFAULT nextval('public.store_store_id_seq'::regclass) NOT NULL, manager_staff_id smallint NOT NULL, address_id smallint NOT NULL, last_update timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE public.store OWNER TO postgres; -- -- Name: sales_by_store; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.sales_by_store AS SELECT concat(c.city, ', ', cy.country) AS store, concat(m.first_name, ' ', m.last_name) AS manager, sum(p.amount) AS total_sales FROM (((((((public.payment p JOIN public.rental r ON ((p.rental_id = r.rental_id))) JOIN public.inventory i ON ((r.inventory_id = i.inventory_id))) JOIN public.store s ON ((i.store_id = s.store_id))) JOIN public.address a ON ((s.address_id = a.address_id))) JOIN public.city c ON ((a.city_id = c.city_id))) JOIN public.country cy ON ((c.country_id = cy.country_id))) JOIN public.staff m ON ((s.manager_staff_id = m.staff_id))) GROUP BY s.store_id, c.city, cy.country, m.first_name, m.last_name ORDER BY cy.country, c.city; ALTER VIEW public.sales_by_store OWNER TO postgres; -- -- Name: sales_top5_by_film_category; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.sales_top5_by_film_category AS WITH sales_rankings AS ( SELECT c.name AS category, f.title, sum(p.amount) AS sum, rank() OVER (PARTITION BY c.name ORDER BY (sum(p.amount)) DESC) AS rank FROM (((((public.payment p JOIN public.rental r ON ((p.rental_id = r.rental_id))) JOIN public.inventory i ON ((r.inventory_id = i.inventory_id))) JOIN public.film f ON ((i.film_id = f.film_id))) JOIN public.film_category fc ON ((f.film_id = fc.film_id))) JOIN public.category c ON ((fc.category_id = c.category_id))) GROUP BY c.name, f.title ) SELECT category, rank, title, sum AS sales FROM sales_rankings WHERE (rank <= 5); ALTER VIEW public.sales_top5_by_film_category OWNER TO postgres; -- -- Name: staff_list; Type: VIEW; Schema: public; Owner: postgres -- CREATE VIEW public.staff_list AS SELECT s.staff_id AS id, (((s.first_name)::text || ' '::text) || (s.last_name)::text) AS name, a.address, a.postal_code AS "zip code", a.phone, city.city, country.country, s.store_id AS sid FROM (((public.staff s JOIN public.address a USING (address_id)) JOIN public.city USING (city_id)) JOIN public.country USING (country_id)); ALTER VIEW public.staff_list OWNER TO postgres; -- -- Name: payment_p0000_default; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p0000_default DEFAULT; -- -- Name: payment_p2007_01; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_01 FOR VALUES FROM ('2007-01-01 00:00:00') TO ('2007-02-01 00:00:00'); -- -- Name: payment_p2007_02; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_02 FOR VALUES FROM ('2007-02-01 00:00:00') TO ('2007-03-01 00:00:00'); -- -- Name: payment_p2007_03; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_03 FOR VALUES FROM ('2007-03-01 00:00:00') TO ('2007-04-01 00:00:00'); -- -- Name: payment_p2007_04; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_04 FOR VALUES FROM ('2007-04-01 00:00:00') TO ('2007-05-01 00:00:00'); -- -- Name: payment_p2007_05; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_05 FOR VALUES FROM ('2007-05-01 00:00:00') TO ('2007-06-01 00:00:00'); -- -- Name: payment_p2007_06; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_06 FOR VALUES FROM ('2007-06-01 00:00:00') TO ('2007-07-01 00:00:00'); -- -- Name: payment_p2007_07_max; Type: TABLE ATTACH; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment ATTACH PARTITION public.payment_p2007_07_max FOR VALUES FROM ('2007-07-01 00:00:00') TO (MAXVALUE); -- -- Name: actor actor_pkey_incl; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.actor ADD CONSTRAINT actor_pkey_incl PRIMARY KEY (actor_id) INCLUDE (first_name, last_name); -- -- Name: address address_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.address ADD CONSTRAINT address_pkey PRIMARY KEY (address_id); -- -- Name: category category_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.category ADD CONSTRAINT category_pkey PRIMARY KEY (category_id); -- -- Name: city city_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.city ADD CONSTRAINT city_pkey PRIMARY KEY (city_id); -- -- Name: country country_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.country ADD CONSTRAINT country_pkey PRIMARY KEY (country_id); -- -- Name: customer customer_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.customer ADD CONSTRAINT customer_pkey PRIMARY KEY (customer_id); -- -- Name: film_actor film_actor_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film_actor ADD CONSTRAINT film_actor_pkey PRIMARY KEY (actor_id, film_id); -- -- Name: film_category film_category_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film_category ADD CONSTRAINT film_category_pkey PRIMARY KEY (film_id, category_id); -- -- Name: film film_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film ADD CONSTRAINT film_pkey PRIMARY KEY (film_id); -- -- Name: payment_p2007_01 idx_pk_payment_p2007_01_payment_id; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_01 ADD CONSTRAINT idx_pk_payment_p2007_01_payment_id PRIMARY KEY (payment_id); -- -- Name: payment_p2007_02 idx_pk_payment_p2007_02_payment_id; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_02 ADD CONSTRAINT idx_pk_payment_p2007_02_payment_id PRIMARY KEY (payment_id); -- -- Name: payment_p2007_03 idx_pk_payment_p2007_03_payment_id; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_03 ADD CONSTRAINT idx_pk_payment_p2007_03_payment_id PRIMARY KEY (payment_id); -- -- Name: payment_p2007_04 idx_pk_payment_p2007_04_payment_id; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_04 ADD CONSTRAINT idx_pk_payment_p2007_04_payment_id PRIMARY KEY (payment_id); -- -- Name: payment_p2007_05 idx_pk_payment_p2007_05_payment_id; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_05 ADD CONSTRAINT idx_pk_payment_p2007_05_payment_id PRIMARY KEY (payment_id); -- -- Name: payment_p2007_06 idx_pk_payment_p2007_06_payment_id; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_06 ADD CONSTRAINT idx_pk_payment_p2007_06_payment_id PRIMARY KEY (payment_id); -- -- Name: inventory inventory_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.inventory ADD CONSTRAINT inventory_pkey PRIMARY KEY (inventory_id); -- -- Name: language language_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.language ADD CONSTRAINT language_pkey PRIMARY KEY (language_id); -- -- Name: rental rental_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.rental ADD CONSTRAINT rental_pkey PRIMARY KEY (rental_id); -- -- Name: staff staff_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.staff ADD CONSTRAINT staff_pkey PRIMARY KEY (staff_id); -- -- Name: store store_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.store ADD CONSTRAINT store_pkey PRIMARY KEY (store_id); -- -- Name: film_fulltext_idx; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX film_fulltext_idx ON public.film USING gist (fulltext); -- -- Name: idx_actor_last_name; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_actor_last_name ON public.actor USING btree (last_name); -- -- Name: idx_fk_address_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_address_id ON public.customer USING btree (address_id); -- -- Name: idx_fk_city_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_city_id ON public.address USING btree (city_id); -- -- Name: idx_fk_country_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_country_id ON public.city USING btree (country_id); -- -- Name: idx_fk_film_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_film_id ON public.film_actor USING btree (film_id); -- -- Name: idx_fk_inventory_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_inventory_id ON public.rental USING btree (inventory_id); -- -- Name: idx_fk_language_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_language_id ON public.film USING btree (language_id); -- -- Name: idx_fk_original_language_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_original_language_id ON public.film USING btree (original_language_id); -- -- Name: idx_fk_payment_p2007_01_customer_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_01_customer_id ON public.payment_p2007_01 USING btree (customer_id); -- -- Name: idx_fk_payment_p2007_01_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_01_staff_id ON public.payment_p2007_01 USING btree (staff_id); -- -- Name: idx_fk_payment_p2007_02_customer_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_02_customer_id ON public.payment_p2007_02 USING btree (customer_id); -- -- Name: idx_fk_payment_p2007_02_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_02_staff_id ON public.payment_p2007_02 USING btree (staff_id); -- -- Name: idx_fk_payment_p2007_03_customer_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_03_customer_id ON public.payment_p2007_03 USING btree (customer_id); -- -- Name: idx_fk_payment_p2007_03_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_03_staff_id ON public.payment_p2007_03 USING btree (staff_id); -- -- Name: idx_fk_payment_p2007_04_customer_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_04_customer_id ON public.payment_p2007_04 USING btree (customer_id); -- -- Name: idx_fk_payment_p2007_04_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_04_staff_id ON public.payment_p2007_04 USING btree (staff_id); -- -- Name: idx_fk_payment_p2007_05_customer_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_05_customer_id ON public.payment_p2007_05 USING btree (customer_id); -- -- Name: idx_fk_payment_p2007_05_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_05_staff_id ON public.payment_p2007_05 USING btree (staff_id); -- -- Name: idx_fk_payment_p2007_06_customer_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_06_customer_id ON public.payment_p2007_06 USING btree (customer_id); -- -- Name: idx_fk_payment_p2007_06_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_payment_p2007_06_staff_id ON public.payment_p2007_06 USING btree (staff_id); -- -- Name: idx_fk_store_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_fk_store_id ON public.customer USING btree (store_id); -- -- Name: idx_last_name; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_last_name ON public.customer USING btree (last_name); -- -- Name: idx_store_id_film_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_store_id_film_id ON public.inventory USING btree (store_id, film_id); -- -- Name: idx_title; Type: INDEX; Schema: public; Owner: postgres -- CREATE INDEX idx_title ON public.film USING btree (title); -- -- Name: idx_unq_manager_staff_id; Type: INDEX; Schema: public; Owner: postgres -- CREATE UNIQUE INDEX idx_unq_manager_staff_id ON public.store USING btree (manager_staff_id); -- -- Name: rental_report _RETURN; Type: RULE; Schema: public; Owner: postgres -- CREATE OR REPLACE VIEW public.rental_report AS WITH rentals AS ( SELECT film.film_id, ((((('{ "title": '::text || quote_ident((film.title)::text)) || ', "mpaa-rating": '::text) || quote_ident((film.rating)::text)) || ' }'::text))::jsonb AS jsonb FROM public.film ) SELECT ((((((('{ "customer": '::text || quote_ident((((customer.first_name)::text || ' '::text) || (customer.last_name)::text))) || ', "rental_date": '::text) || quote_ident(((lower(rental.rental_period))::date)::text)) || ', "rentals": '::text) || json_agg(rentals.jsonb)) || '}'::text))::jsonb AS report FROM (((public.rental JOIN public.customer USING (customer_id)) JOIN public.inventory USING (inventory_id)) JOIN rentals USING (film_id)) GROUP BY customer.customer_id, ((lower(rental.rental_period))::date); -- -- Name: payment payment_pk_update; Type: RULE; Schema: public; Owner: postgres -- CREATE RULE payment_pk_update AS ON UPDATE TO public.payment WHERE (new.payment_id <> old.payment_id) DO INSTEAD SELECT public.payment_id_change_handler(old.payment_id, new.payment_id, new.customer_id, new.staff_id, new.rental_id, new.amount, (new.payment_date)::timestamp with time zone) AS payment_id_change_handler; -- -- Name: film film_fulltext_trigger; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER film_fulltext_trigger BEFORE INSERT OR UPDATE ON public.film FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description'); -- -- Name: actor last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.actor FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: address last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.address FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: category last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.category FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: city last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.city FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: country last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.country FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: customer last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.customer FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: film last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.film FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: film_actor last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.film_actor FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: film_category last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.film_category FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: inventory last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.inventory FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: language last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.language FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: rental last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.rental FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: staff last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.staff FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: store last_updated; Type: TRIGGER; Schema: public; Owner: postgres -- CREATE TRIGGER last_updated BEFORE UPDATE ON public.store FOR EACH ROW EXECUTE FUNCTION public.last_updated(); -- -- Name: address address_city_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.address ADD CONSTRAINT address_city_id_fkey FOREIGN KEY (city_id) REFERENCES public.city(city_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: city city_country_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.city ADD CONSTRAINT city_country_id_fkey FOREIGN KEY (country_id) REFERENCES public.country(country_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: customer customer_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.customer ADD CONSTRAINT customer_address_id_fkey FOREIGN KEY (address_id) REFERENCES public.address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: customer customer_store_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.customer ADD CONSTRAINT customer_store_id_fkey FOREIGN KEY (store_id) REFERENCES public.store(store_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: film_actor film_actor_actor_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film_actor ADD CONSTRAINT film_actor_actor_id_fkey FOREIGN KEY (actor_id) REFERENCES public.actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: film_actor film_actor_film_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film_actor ADD CONSTRAINT film_actor_film_id_fkey FOREIGN KEY (film_id) REFERENCES public.film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: film_category film_category_category_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film_category ADD CONSTRAINT film_category_category_id_fkey FOREIGN KEY (category_id) REFERENCES public.category(category_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: film_category film_category_film_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film_category ADD CONSTRAINT film_category_film_id_fkey FOREIGN KEY (film_id) REFERENCES public.film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: film film_language_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film ADD CONSTRAINT film_language_id_fkey FOREIGN KEY (language_id) REFERENCES public.language(language_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: film film_original_language_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.film ADD CONSTRAINT film_original_language_id_fkey FOREIGN KEY (original_language_id) REFERENCES public.language(language_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: inventory inventory_film_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.inventory ADD CONSTRAINT inventory_film_id_fkey FOREIGN KEY (film_id) REFERENCES public.film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: inventory inventory_store_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.inventory ADD CONSTRAINT inventory_store_id_fkey FOREIGN KEY (store_id) REFERENCES public.store(store_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: payment_p2007_01 payment_p2007_01_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_01 ADD CONSTRAINT payment_p2007_01_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id); -- -- Name: payment_p2007_01 payment_p2007_01_rental_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_01 ADD CONSTRAINT payment_p2007_01_rental_id_fkey FOREIGN KEY (rental_id) REFERENCES public.rental(rental_id); -- -- Name: payment_p2007_01 payment_p2007_01_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_01 ADD CONSTRAINT payment_p2007_01_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id); -- -- Name: payment_p2007_02 payment_p2007_02_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_02 ADD CONSTRAINT payment_p2007_02_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id); -- -- Name: payment_p2007_02 payment_p2007_02_rental_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_02 ADD CONSTRAINT payment_p2007_02_rental_id_fkey FOREIGN KEY (rental_id) REFERENCES public.rental(rental_id); -- -- Name: payment_p2007_02 payment_p2007_02_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_02 ADD CONSTRAINT payment_p2007_02_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id); -- -- Name: payment_p2007_03 payment_p2007_03_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_03 ADD CONSTRAINT payment_p2007_03_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id); -- -- Name: payment_p2007_03 payment_p2007_03_rental_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_03 ADD CONSTRAINT payment_p2007_03_rental_id_fkey FOREIGN KEY (rental_id) REFERENCES public.rental(rental_id); -- -- Name: payment_p2007_03 payment_p2007_03_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_03 ADD CONSTRAINT payment_p2007_03_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id); -- -- Name: payment_p2007_04 payment_p2007_04_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_04 ADD CONSTRAINT payment_p2007_04_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id); -- -- Name: payment_p2007_04 payment_p2007_04_rental_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_04 ADD CONSTRAINT payment_p2007_04_rental_id_fkey FOREIGN KEY (rental_id) REFERENCES public.rental(rental_id); -- -- Name: payment_p2007_04 payment_p2007_04_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_04 ADD CONSTRAINT payment_p2007_04_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id); -- -- Name: payment_p2007_05 payment_p2007_05_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_05 ADD CONSTRAINT payment_p2007_05_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id); -- -- Name: payment_p2007_05 payment_p2007_05_rental_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_05 ADD CONSTRAINT payment_p2007_05_rental_id_fkey FOREIGN KEY (rental_id) REFERENCES public.rental(rental_id); -- -- Name: payment_p2007_05 payment_p2007_05_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_05 ADD CONSTRAINT payment_p2007_05_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id); -- -- Name: payment_p2007_06 payment_p2007_06_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_06 ADD CONSTRAINT payment_p2007_06_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id); -- -- Name: payment_p2007_06 payment_p2007_06_rental_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_06 ADD CONSTRAINT payment_p2007_06_rental_id_fkey FOREIGN KEY (rental_id) REFERENCES public.rental(rental_id); -- -- Name: payment_p2007_06 payment_p2007_06_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.payment_p2007_06 ADD CONSTRAINT payment_p2007_06_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id); -- -- Name: rental rental_customer_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.rental ADD CONSTRAINT rental_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES public.customer(customer_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: rental rental_inventory_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.rental ADD CONSTRAINT rental_inventory_id_fkey FOREIGN KEY (inventory_id) REFERENCES public.inventory(inventory_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: rental rental_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.rental ADD CONSTRAINT rental_staff_id_fkey FOREIGN KEY (staff_id) REFERENCES public.staff(staff_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: staff staff_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.staff ADD CONSTRAINT staff_address_id_fkey FOREIGN KEY (address_id) REFERENCES public.address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: staff staff_store_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.staff ADD CONSTRAINT staff_store_id_fkey FOREIGN KEY (store_id) REFERENCES public.store(store_id); -- -- Name: store store_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.store ADD CONSTRAINT store_address_id_fkey FOREIGN KEY (address_id) REFERENCES public.address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- Name: store store_manager_staff_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres -- ALTER TABLE ONLY public.store ADD CONSTRAINT store_manager_staff_id_fkey FOREIGN KEY (manager_staff_id) REFERENCES public.staff(staff_id) ON UPDATE CASCADE ON DELETE RESTRICT; -- -- PostgreSQL database dump complete --