190 lines
4.6 KiB
SQL
190 lines
4.6 KiB
SQL
CREATE TABLE IF NOT EXISTS public.storage (
|
|
id uuid NOT NULL DEFAULT uuidv7(),
|
|
created_at timestamp without time zone NOT NULL DEFAULT now(),
|
|
filename text NOT NULL,
|
|
mime_type text NOT NULL,
|
|
file_size_bytes INT NOT NULL,
|
|
file_data BYTEA NOT NULL,
|
|
expires_at timestamp without time zone,
|
|
tag text
|
|
);
|
|
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'storage'
|
|
AND column_name = 'file_data'
|
|
) THEN
|
|
ALTER TABLE public.storage
|
|
ALTER COLUMN file_data SET STORAGE EXTERNAL;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM pg_constraint
|
|
WHERE conname = 'storage_pkey'
|
|
AND conrelid = 'public.storage'::regclass
|
|
) THEN
|
|
ALTER TABLE public.storage
|
|
ADD CONSTRAINT storage_pkey PRIMARY KEY (id);
|
|
END IF;
|
|
END $$;
|
|
|
|
--- users_storage
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'users_storage'
|
|
) THEN
|
|
TRUNCATE TABLE users_storage CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
ALTER TABLE IF EXISTS public.users_storage
|
|
DROP COLUMN IF EXISTS "storageId";
|
|
|
|
ALTER TABLE IF EXISTS public.users_storage
|
|
ADD COLUMN IF NOT EXISTS storage_id uuid;
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'userstorage_storage'
|
|
AND conrelid = 'public.users_storage'::regclass
|
|
) THEN
|
|
ALTER TABLE public.users_storage
|
|
ADD CONSTRAINT userstorage_storage
|
|
FOREIGN KEY (storage_id) REFERENCES public.storage (id)
|
|
ON UPDATE CASCADE ON DELETE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
ALTER TABLE users_storage
|
|
DROP CONSTRAINT IF EXISTS users_storage_user_storage_key;
|
|
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'users_storage_user_storage_key'
|
|
) THEN
|
|
ALTER TABLE public.users_storage
|
|
ADD CONSTRAINT users_storage_user_storage_key UNIQUE ("userId", storage_id);
|
|
END IF;
|
|
END $$;
|
|
|
|
---IMAGES
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'images_refs'
|
|
) THEN
|
|
TRUNCATE TABLE images_refs;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'images_refs'
|
|
AND column_name = 'img'
|
|
) THEN
|
|
ALTER TABLE images_refs
|
|
ALTER COLUMN img TYPE uuid USING img::uuid;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'images_refs_img_storage'
|
|
AND conrelid = 'public.images_refs'::regclass
|
|
) THEN
|
|
ALTER TABLE public.images_refs
|
|
ADD CONSTRAINT images_refs_img_storage
|
|
FOREIGN KEY (img) REFERENCES public.storage (id)
|
|
ON UPDATE CASCADE ON DELETE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'images_refs'
|
|
AND column_name = 'thumb'
|
|
) THEN
|
|
ALTER TABLE images_refs
|
|
ALTER COLUMN thumb TYPE uuid USING thumb::uuid;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'images_refs_thumb_storage'
|
|
AND conrelid = 'public.images_refs'::regclass
|
|
) THEN
|
|
ALTER TABLE public.images_refs
|
|
ADD CONSTRAINT images_refs_thumb_storage
|
|
FOREIGN KEY (thumb) REFERENCES public.storage (id)
|
|
ON UPDATE CASCADE ON DELETE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
--- VIDEOS
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'videos_refs'
|
|
) THEN
|
|
TRUNCATE TABLE videos_refs;
|
|
END IF;
|
|
END $$;
|
|
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'videos_refs'
|
|
AND column_name = 'video'
|
|
) THEN
|
|
ALTER TABLE videos_refs
|
|
ALTER COLUMN video TYPE uuid USING video::uuid;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'videos_refs_video_storage'
|
|
AND conrelid = 'public.videos_refs'::regclass
|
|
) THEN
|
|
ALTER TABLE public.videos_refs
|
|
ADD CONSTRAINT videos_refs_video_storage
|
|
FOREIGN KEY (video) REFERENCES public.storage (id)
|
|
ON UPDATE CASCADE ON DELETE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF EXISTS (
|
|
SELECT
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'videos_refs'
|
|
AND column_name = 'thumb'
|
|
) THEN
|
|
ALTER TABLE videos_refs
|
|
ALTER COLUMN thumb TYPE uuid USING thumb::uuid;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'videos_refs_thumb_storage'
|
|
AND conrelid = 'public.videos_refs'::regclass
|
|
) THEN
|
|
ALTER TABLE public.videos_refs
|
|
ADD CONSTRAINT videos_refs_thumb_storage
|
|
FOREIGN KEY (thumb) REFERENCES public.storage (id)
|
|
ON UPDATE CASCADE ON DELETE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|