DROP DATABASE IF EXISTS haystack_db; CREATE DATABASE haystack_db; DROP SCHEMA IF EXISTS haystack CASCADE; CREATE SCHEMA haystack; /* -----| Schema tables |----- */ CREATE TABLE haystack.users ( id uuid PRIMARY KEY DEFAULT gen_random_uuid() ); CREATE TABLE haystack.user_images ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), image_name TEXT NOT NULL, image BYTEA NOT NULL, user_id uuid NOT NULL REFERENCES haystack.users (id) ); CREATE TABLE haystack.image_tags ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), tag TEXT NOT NULL, image_id UUID NOT NULL REFERENCES haystack.user_images (id) ); CREATE TABLE haystack.image_text ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), image_text TEXT NOT NULL, image_id UUID NOT NULL REFERENCES haystack.user_images (id) ); CREATE TABLE haystack.image_links ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), link TEXT NOT NULL, image_id UUID NOT NULL REFERENCES haystack.user_images (id) ); /* -----| Stored Procedures |----- */ CREATE OR REPLACE FUNCTION notify_new_image() RETURNS TRIGGER AS $$ BEGIN PERFORM pg_notify('new_image', NEW.id::texT); RETURN NEW; END $$ LANGUAGE plpgsql; /* -----| Triggers |----- */ CREATE OR REPLACE TRIGGER on_new_image AFTER INSERT ON haystack.user_images FOR EACH ROW EXECUTE PROCEDURE notify_new_image(); /* -----| Test Data |----- */ INSERT INTO haystack.users VALUES ('fcc22dbb-7792-4595-be8e-d0439e13990a');